entity-framework - Entity Framework 'Update Model from Database'在基类和子类之间重新创建关联

标签 entity-framework inheritance sql-server-2014

我正在尝试使用Entity Framework首先实现数据库的许多基类/子类。在学习了一些在线教程之后,我决定尝试TPT继承。

在数据库上,我有一个基类表“Location”和两个子类表:“StreetAddress”和“RuralRouteAddress”。我已经在子类表和基类表的主键之间定义了外键约束。 “位置的主键是自动递增的列,而两个子类表”的主键不是自动递增的。

在 Entity Framework 中,我将两个子类的“基本类型”定义为“位置”。然后,我从模型中删除了关联(及其对应的导航属性)。我还从子类中删除了ID列映射,因为ID现在是从“Location”基类继承的。

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

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

这还不错,但是我想在其中使用TPT继承的项目有很多继承。每当我更新模型时,都必须删除大量关联并重新组织整个图,这并不是很吸引人。

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

最佳答案

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

乔伊

关于entity-framework - Entity Framework 'Update Model from Database'在基类和子类之间重新创建关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408632/

相关文章:

java - 当对象是 Java 中的接口(interface)引用时的类型转换

entity-framework - Entity Framework : How to exclude deleted objects from Queries

entity-framework - C# | Entity Framework |无法从固定大小类型的数组中删除项目

entity-framework - Entity Framework 和存储库模式问题

sql - 计算 nVarchar 的值

sql - 基于层次结构的透视数据

sql - 在 SQL Server 查询结果中显示小计

c# - GetWeekOfYear 与 Entity Framework

c# - 继承:根据具体对象在运行时调用正确的方法

java - 将非重写派生类方法的方法引用传递给其基类是否合法且已定义?