外键约束解释问题

时间:2011-05-19 16:53:00

标签: c# .net entity-framework sql-server-2008 entity-relationship

我从数据库中生成Visual Studio中的实体数据模型。

但是,我注意到它不会从某些外键生成关系或导航属性。当使用禁用选项Enforce Foreign Key Constraint定义外键contsraints时会发生这种情况,如下面的展览(来自SSMS)。

有什么方法可以解决这个问题吗?不幸的是,我无法改变我的数据库架构。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以从设计人员手动添加它们,但它可能会产生一些后果,具体取决于您使用的实体框架的版本。

如果您只是从工具箱中添加关联,则默认情况下会创建独立关联。必须将独立关联映射到数据库对应方。这意味着您必须通过修改SSDL手动打开EDMX并欺骗EF(您将手动添加SSDL部件的关系,这可能是一项非常艰巨的任务 - 遵循SSDL参考:AssociationSetAssociation元素)。现在,您可以在设计器的“映射详细信息”窗口中映射关系(您还必须修改实体,因为在使用独立关联时不得将FK属性映射到实体,并且在多对多关联的情况下,您将必须删除联结表的实体)。 EF会相信这种关系存在于数据库中。手动修改SSDL后,无法再使用数据库中的更新。它将删除所有手动更改。

如果您使用的是EFv4,则可以使用foreign key association(这两种类型之间的完全差异为described here)。外键关联未映射,但不能用于定义多对多关系。

如果数据库中的数据没有强制执行关系(这可能因为FK被禁用而发生),则会出现问题。在这种情况下,您的应用程序将无法工作,除了修复数据库中的数据完整性或从模型中删除关联之外,将无法解决此问题。

最适合您的解决方案是在数据库中打开FK!

答案 1 :(得分:0)

不幸的是你必须在模型中手动添加它们。这就是OR Mapping的强大功能。模型看起来可能与数据库不同(更好)。