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

6 ado.net entity-framework

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

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

Table Name -Game
    ItemID - PK
    Console   

Table Name -Film
    ItemID - PK
    Type
Run Code Online (Sandbox Code Playgroud)

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

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

Lad*_*nka 4

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

在此输入图像描述

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

在此输入图像描述

使用工具箱中的继承Film(如上一个屏幕截图中所述)并从到Item和从Game到绘制一条线Item。现在你需要完成这个模型。当前模型将不会验证,因为ItemId它同时映射到父实体和子实体中。ItemIdFilm和实体中删除Game。您还可以将 Item 实体设为 Abstract,您将得到:

在此输入图像描述