实体框架"从数据库更新模型"重新创建基类和子类之间的关联

Chr*_*ide 9 inheritance entity-framework sql-server-2014

我试图首先使用Entity Framework实现一些基类/子类.在一些在线教程之后,我决定尝试TPT继承.

在数据库中,我有一个基类表'Location'和两个子类表:'StreetAddress'和'RuralRouteAddress'.我已经在子类表和主键上的基类表之间定义了外键约束.'Location的主键是一个自动增量列,两个子类表的主键不是自动增量.

在实体框架中,我将两个子类的"基本类型"定义为"位置".然后,我从模型中删除了关联(及其相应的导航属性).我还从子类中删除了ID列映射,因为ID现在继承自"Location"基类.

这似乎有效.我没有尝试更新/插入,但查询返回具有适当继承的数据.

我的问题是,每当我'从数据库更新模型'时,他的继承关联线都会停留,但是基类和子类之间的FK关联会被带回来...... 然后我必须删除它们,并重新对齐我的图表上的关联线(我对模型图的布局有点挑剔).

这并不是那么糟糕,但我想使用TPT继承的项目有很多继承.每次更新模型时,必须删除大量关联并重新组织我的整个图表并不是很吸引人.

我实现继承时是否做错了什么?有没有办法忽略/排除在更新模型时创建某些关联?

小智 0

当您从数据库更新模型时,您在数据库中定义的关系将始终重新出现。这是设计使然。如果您希望模型中的类具有不同的关系结构,请尝试从存储过程创建一个复杂模型,该存储过程从基表中选择所有列(或您想要的所有列)。导入该过程并在函数导入中,通过创建新的复杂类型来编辑返回类型,甚至只是重命名 EF 自动创建的结果。然后在该类型上添加关联,并将其用作继承类的基类型。这样做的好处是,您可以通过编辑存储过程来调整类型结构以匹配任何表更改,然后使用“获取列信息”和“更新”使复杂类型保持一致。它不会覆盖您的关联,因为它们未在数据库中定义,但它几乎与使用 TPT 一样简单。

乔伊