C# 外键约束的解释问题

C# 外键约束的解释问题,c#,.net,entity-framework,sql-server-2008,entity-relationship,C#,.net,Entity Framework,Sql Server 2008,Entity Relationship,我在VisualStudio中从数据库生成实体数据模型 但是,我注意到它不会从某些外键生成关系或导航属性。当使用禁用选项强制外键约束定义外键约束时,会发生这种情况,如下图所示(来自SSMS) 有什么办法解决这个问题吗?不幸的是,我不能改变我的数据库模式 不幸的是,您必须手动将这些添加到模型中。这就是OR映射的威力。模型看起来可能与数据库不同(更好)。您可以从设计器中手动添加它们,但这可能会产生一些后果,具体取决于您使用的实体框架的版本 如果只是从工具箱中添加关联,则默认情况下会创建独立关联。独立

我在VisualStudio中从数据库生成实体数据模型

但是,我注意到它不会从某些外键生成关系或导航属性。当使用禁用选项
强制外键约束
定义外键约束时,会发生这种情况,如下图所示(来自SSMS)

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


不幸的是,您必须手动将这些添加到模型中。这就是OR映射的威力。模型看起来可能与数据库不同(更好)。

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

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

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

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


最好的解决方案是在数据库中打开FKs

禁用的FK不是FK,我会和你们的DBA讨论这个问题。右键单击设计图面中的实体,然后选择添加->关联。