【问题标题】:Problem in mapping fragments in Entity Framework在实体框架中映射片段的问题
【发布时间】:2011-06-16 20:03:18
【问题描述】:

我正在使用实体框架,但遇到了一个奇怪的构建错误。

我正在建立一个论坛,并在数据库中为“忽略”设置了一个表,当人们不喜欢对方时,他们会忽略某人。该表有两列,它们一起是主键。

PK InitiatingUser
PK IgnoredUser

当 EF 映射此表时,我收到此错误:

错误 7 错误 3034:从第 1467、1477 行开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行。确保这两个映射片段将 AssociationSet 的两端映射到相应的列。

我在 XML 编辑器中打开 edmx 并导航到有问题的行。

          <MappingFragment StoreEntitySet="Ignores">
            <ScalarProperty Name="IgnoredUser" ColumnName="IgnoredUser" />
            <ScalarProperty Name="InitiatingUser" ColumnName="InitiatingUser" />
          </MappingFragment>

我刚刚开始使用 EF,我不明白发生了什么或问题可能是什么。

编辑

ignores 之间的关系用于将启动用户和被忽略用户的外键映射到 users 表的主键(用户名)。这就是我第一次将 EF 映射到该表时的情况。从那以后,我删除了 FK 以查看是否有帮助,但没有。

【问题讨论】:

  • 数据库中的关系是什么样的?
  • 查看我对关系的编辑。

标签: entity-framework entity-framework-4 entity-relationship


【解决方案1】:

PK 发起用户; PK IgnoredUser

两个主键不允许 edmx file.so 在该表中创建 sno 列并将其设为主键。去掉 InitiatingUser 和 IgnoredUser 的 pk。 现在在那两列中没有可用的主键。

喜欢

PK sno; FK 发起用户; FK IgnoredUser

【讨论】:

    【解决方案2】:

    这可能是由于在您的实体模型中包含了多对多连接表,或者 EF 认为是这样的表(可能例如没有自己的自包含密钥,但其身份由两个或多个外键组成)。

    例如,假设您有以下表格:

    • 地址
    • PersonAddress(仅包含 PersonID 和 AddressID)

    在您的实体模型中,您应该只添加人员和地址。如果添加 PersonAddress,则 EF 将抛出错误。根据this MSDN Q&A,EF 会自动考虑连接表。

    【讨论】:

    • 正是我的模型出了什么问题,我盲目地添加了数据库中的所有表,忘记了 M:N 关系由 EF 处理。
    • 你的回答救了我。两次。
    【解决方案3】:

    我不知道这里出了什么问题,但我只是从 ORM 和 DB 中删除了表,然后使用实际的 ID 列重新创建它,而不是两个主键。我重新映射表,编译,现在一切都很好。按照我的方式来做会很方便,但是哦。

    如果有人有任何见解,请告诉我。我宁愿接受别人的回答。

    【讨论】:

    • insight:它可能会尝试维护您在模型中所做的任何更改,而不是盲目地踩踏所有内容以重新创建所有内容。不过,你的回答也解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多