Compartilhar via


Modelo de dados de entidade: herança

O EDM (Modelo de Dados de Entidade) dá suporte à herança para tipos de entidade. A herança no EDM é semelhante à herança para classes em linguagens de programação orientadas a objetos. Assim como acontece com classes em linguagens orientadas a objetos, em um modelo conceitual você pode definir um tipo de entidade (um tipo derivado) que herda de outro tipo de entidade (o tipo base). No entanto, ao contrário das classes na programação orientada a objetos, em um modelo conceitual o tipo derivado sempre herda todas as propriedades e propriedades de navegação do tipo base. Não é possível substituir as propriedades herdadas em um tipo derivado.

Em um modelo conceitual, você pode criar hierarquias de herança nas quais um tipo derivado herda de outro tipo derivado. O tipo na parte superior da hierarquia (o único tipo na hierarquia que não é um tipo derivado) é chamado de tipo raiz. Em uma hierarquia de herança, a chave de entidade deve ser definida no tipo raiz.

Não é possível criar hierarquias de herança nas quais um tipo derivado herda de mais de um tipo. Por exemplo, em um modelo conceitual com um tipo de entidade Book, você pode definir tipos derivados FictionBook e NonFictionBook que cada um herda de Book. No entanto, você não poderia então definir um tipo que herda dos tipos FictionBook e NonFictionBook.

Exemplo

O diagrama a seguir mostra um modelo conceitual com quatro tipos de entidade: Book, FictionBook, e PublisherAuthor. O FictionBook tipo de entidade é um tipo derivado, herdando do Book tipo de entidade. O tipo FictionBook herda as propriedades ISBN (Key), Title e Revision, e define uma propriedade adicional chamada Genre.

Diagrama que mostra um modelo conceitual com quatro tipos de entidade.

O ADO.NET Entity Framework usa uma DSL (linguagem específica do domínio) chamada CSDL (linguagem de definição de esquema conceitual) para definir modelos conceituais. O CSDL a seguir define um tipo de entidade, FictionBook, que herda do tipo Book (como no diagrama acima):

<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
  <Property Type="String" Name="Genre" Nullable="false" />
</EntityType>

Consulte também