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



我正在尝试使用实体框架实现许多基/子类,首先是数据库。在阅读了一些在线教程之后,我决定尝试 TPT 继承。

在数据库中,我有一个基类表"位置",以及两个子类表:"街道地址"和"农村路线地址"。我已经在子类表和基类表的主键上定义了外键约束。"位置的主键"是一个自动递增列,两个子类表的主键不是自动递增的。

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

这似乎奏效了。我还没有尝试更新/插入,但查询会返回具有正确继承的数据。

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

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

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

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

乔伊

最新更新