Modelo de Dados de Entidade: Herança

A herança de suporte de Modelo de Dados de Entidade (EDM) para tipos de entidade. Herança em EDM é semelhante à herança para classes em idiomas de programação orientada a objeto. Como com classes em linguagens orientadas a objeto, 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, diferentemente de classes em programação orientada a objeto, em um modelo conceitual o tipo derivado herda sempre todas as propriedades e as propriedades de navegação do tipo base. Você não pode substituir propriedades herdadas em um tipo derivado.

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

Você não pode criar hierarquias de herança em que um tipo derivado herda de mais de um tipo. Por exemplo, em um modelo conceitual com um tipo de entidade de Book , você pode definir tipos derivados FictionBook e NonFictionBook que cada herda de Book. No entanto, você não pode então definir um tipo que herdasse dos tipos de FictionBook e de NonFictionBook .

Exemplo

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

Diagram that shows a conceptual model with four entity types.

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

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

Confira também