【问题标题】:Problem in mapping fragments in EF4在 EF4 中映射片段的问题
【发布时间】:2010-11-02 17:25:55
【问题描述】:

我有以下型号:

但是当我用 VS2010 编译时,我得到以下错误:

错误 2 错误 3007:从 2018 年第 1784 行开始映射片段时出现问题:[createdby] 列在两个片段中被映射到不同的概念侧属性。

我想要什么?实际上,我希望 Note 实体对 User 实体具有 FK。 什么时候出现错误?当我将 FK 用户添加到注意时,我遇到了错误。如果我删除链接,没问题。 问题是什么 ? 谢谢 约翰

【问题讨论】:

    标签: entity-framework entity-framework-4


    【解决方案1】:

    我还有一个“用户”实体(基于视图)和几个带有 CreatedByUser 和 ModifiedByUser 引用的表。

    这对我有用,不会出现“必须为空”错误:

    • 在“Note”实体上:右键单击:“Add > Association...”。
    • 选择“用户”作为右侧的“最终实体”。
    • 交换多重性:“Notes”应为“Many”,“User”应为“One”。
    • 我取消选择右侧的导航属性,因为我永远不会从“用户”导航到其他表:但这取决于您。
    • 如果您同时拥有“CreatedBy”和“ModifiedBy”属性,那么您可能希望将关联名称更改为更有意义的名称(例如,将“NoteUser”更改为“NoteCreatedByUser”
    • 导航属性同上(例如,将“User”更改为“CreatedByUser”)
    • 取消选中“添加外键属性...”。
    • 点击确定。
    • 重要提示:在“属性”窗口中,转到引用约束并单击省略号。
    • 选择“用户”作为主体。
    • 将依赖属性更改为适当的值(例如“CreatedBy”)
    • 点击确定。

    完成!

    下面是我的项目的屏幕截图。

    【讨论】:

      【解决方案2】:

      我的猜测是 User 实体上的关联已在 Username 上定义,并且 Username 是 SQL Server 中的候选键(在其上定义了唯一索引)。虽然您可以在 SQL Server 中基于此设置创建关系,但当前版本的 EF支持基于候选键创建关联:In EF (3.5 and 4.0) FKs MUST point to Primary Keys.时间>

      使其工作的唯一方法是在 Note 表中创建一个新的 int 字段(如 UserId),然后在 User.Id 之间创建一个新的关系em> (PK) 和 Note.UserID (FK) 和 EF 很乐意为您创建一个基于此的关联。

      【讨论】:

      • 我将答案更新为更具体。请检查一下。
      • 抱歉,有一些不清楚的地方......如果我这样做:这将如何改变我的“创建者”当前字段?
      • 好的,我确实添加了该字段并且它可以工作,但是我应该使用“创建者”等相同的值来提供它,我需要更改我的应用程序以便它提供它吗?
      • 我想说只是摆脱它,在 Note 表中将 UserId 作为 FK,createdby 是多余的。从现在开始,每次查询Notes时,也可​​以Eager Load User导航属性并访问其Username来了解createdby 。延迟加载也会为您做到这一点。
      • 您好我已经实现了你所说的,它确实有效,但是当我保存它时我有以下错误:EntityKey 属性只能在属性的当前值为 null 时设置。
      猜你喜欢
      • 2020-02-08
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多