在实体框架中映射片段的问题

时间:2011-01-27 20:40:25

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

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

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

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表的主键(username)。这就是我第一次将EF映射到此表时的情况。我已经删除了FK,看看它是否会有所帮助,但事实并非如此。

3 个答案:

答案 0 :(得分:27)

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

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

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

在您的实体模型中,您应该只添加人员和地址。如果添加PersonAddress,则EF将抛出错误。根据{{​​3}},EF会自动考虑联接表。

答案 1 :(得分:5)

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

如果有人有任何见解让我知道。我宁愿接受别人的回答。

答案 2 :(得分:0)

PK InitiatingUser; PK IgnoredUser

两个主键不允许edmx file.so在该表中创建sno列,并将其作为主键。删除InitiatingUser和IgnoredUser的pk。 现在在这两列中没有可用的主键。

喜欢

Pk sno; FK InitiatingUser; FK IgnoredUser