【问题标题】:Foreign key contraints interpretation problem外键约束解释问题
【发布时间】:2011-05-20 05:09:11
【问题描述】:

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

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

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

【问题讨论】:

  • 禁用的 FK 不是 FK,我会与您的 dbas 讨论这个问题。

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


【解决方案1】:

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

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

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

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

对您来说最好的解决方案是在数据库中打开 FK!

【讨论】:

    【解决方案2】:

    不幸的是,您必须在模型中手动添加这些。这就是 OR Mapping 的强大之处。模型看起来可能与数据库不同(更好)。

    【讨论】:

    • 右键单击设计图面中的实体,然后选择添加->关联。
    猜你喜欢
    • 2013-08-12
    • 2020-07-09
    • 1970-01-01
    • 2020-03-16
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多