2

我从数据库生成Visual Studio中的实体数据模型。外键约束解释问题

但是,我注意到它不会从某些外键生成关系和导航属性。当外键密钥与禁用选项Enforce Foreign Key Constraint一起定义时发生,如下面的展示(来自SSMS)。

有什么办法可以解决这个问题吗?不幸的是我不能改变我的数据库模式。

enter image description here

+4

禁用的FK不是FK,我会和你的dbas讨论这个问题。 – HLGEM 2011-05-19 17:06:41

回答

1

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

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

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

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

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

+0

+1感谢您的信息。 – Func 2011-05-23 15:38:45

0

不幸的是你要添加这些手工模型。这是OR映射的力量。模型可能与数据库看起来不同(更好)。

+0

我可以试试,但如何? – Func 2011-05-19 17:32:58

+0

右键单击设计图面上的实体,然后选择添加 - >关联。 – 2011-05-19 19:58:53