如何在实体设计器中映射每种类型的表(TPT)继承?

时间:2011-03-25 23:47:40

标签: entity-framework ado.net

我在我的数据库中创建了大量的表,这里有一些问题:

Table Name -Item
    ItemID - PK (Auto Increment)
    Title        

Table Name -Game
    ItemID - PK
    Console   

Table Name -Film
    ItemID - PK
    Type

我还在ItemID和Film-Item以及Game-Item之间添加了一个关联

问题是,当我将它放在Visual Studio中并使用实体框架时,它似乎有点崩溃了类并完全删除了电影和游戏...我不能在我的ASP代码中使用Game或Film作为实体,任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

是的,这就是实体设计师的行为方式。如果您在数据库中对结构进行建模并使用从数据库更新模型,它确实将被建模为常见关联,因为EF还不知道您希望将其建模为继承。你会得到这个:

enter image description here

您必须手动修改此模型才能使用TPT继承。首先删除两个关系。它还将删除导航属性,您将得到:

enter image description here

从工具箱中使用继承(如前面的屏幕截图所示),并从FilmItem以及从GameItem画一条线。现在你需要完成这个模型。当前模型将不会验证,因为ItemId在父实体和子实体中都已映射。从ItemIdFilm实体中删除Game。你也可以使Item实体抽象,你会得到这个:

enter image description here