Modelo de Dados de Entidade: Herança
O Modelo de Dados de Entidade (EDM) suporta herança para tipos de entidade. A herança no EDM é semelhante à herança para classes em linguagens de programação orientadas a objetos. Como nas 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 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 Book
tipo de entidade, você pode definir tipos FictionBook
derivados e NonFictionBook
que cada um herda do Book
. No entanto, não foi possível definir um tipo que herda dos FictionBook
tipos e NonFictionBook
.
Exemplo
O diagrama a seguir mostra um modelo conceitual com quatro tipos de entidade: Book
, FictionBook
, Publisher
e Author
. O FictionBook
tipo de entidade é um tipo derivado, herdado do Book
tipo de entidade. O FictionBook
tipo herda as ISBN (Key)
propriedades , Title
, e Revision
e define uma propriedade adicional chamada Genre
.
O ADO.NET Entity Framework usa uma linguagem específica de domínio (DSL) chamada linguagem de definição de esquema conceitual (CSDL) para definir modelos conceituais. A CSDL a seguir define um tipo de entidade, FictionBook
, que herda do Book
tipo (como no diagrama acima):
<EntityType Name="FictionBook" BaseType="BooksModel.Book" >
<Property Type="String" Name="Genre" Nullable="false" />
</EntityType>