我试图首先使用Entity Framework实现一些基类/子类。在一些在线教程之后,我决定尝试TPT继承。
在数据库上,我有一个基类表'Location'和两个子类表:'StreetAddress'和'RuralRouteAddress'。我已经在子类表和主键上的基类表之间定义了外键约束。 'Location的主键是一个自动增量列,两个子类表的主键不是自动增量。
在实体框架中,我将两个子类的“基本类型”定义为“位置”。然后,我从模型中删除了关联(及其相应的导航属性)。我还从子类中删除了ID列映射,因为ID现在继承自“Location”基类。
这似乎有效。我没有尝试更新/插入,但是查询返回了具有适当继承的数据。
我的问题是,每当我'从数据库更新模型'时,他的继承关联线都会停留,但是基类和子类之间的FK关联会被带回来......然后我必须删除它们,并重新对齐我的图表上的关联线(我对模型图的布局有点挑剔)。
这不是那么糟糕,但我想要使用TPT继承的项目有很多继承。每次更新模型时,必须删除大量关联并重新组织我的整个图表,这不是很有吸引力。
实施继承时,我做错了吗?有没有办法忽略/排除在更新模型时创建某些关联?
答案 0 :(得分:0)
从数据库更新模型时,您在数据库中定义的关系将始终重新出现。这是设计的。如果要在模型中具有具有不同关系结构的类,请尝试从存储过程创建复杂模型,该存储过程从基表中选择所有列(或所需的所有列)。导入该过程并在Function Imports中,通过创建新的复杂类型来编辑返回类型,甚至只重命名EF自动创建的结果。然后在该类型上添加关联,并将其用作继承类的基类型。 这很好的部分是您可以通过编辑存储过程来调整类型结构以匹配任何表更改,然后使用“获取列信息”和“更新”将复杂类型放入行中。它不会覆盖您的关联,因为它们没有在数据库中定义,但它几乎与使用TPT一样简单。
乔伊