我正在使用实体框架,我遇到了一个奇怪的构建错误。
我正在建立一个论坛,我在数据库中设置了一个“忽略”的表,当人们不喜欢彼此时会忽略某个人。该表有两列,它们是主键。
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,看看它是否会有所帮助,但事实并非如此。
答案 0 :(得分:27)
这可能是由于在您的实体模型中包含了多对多连接表,或者EF认为是这样一个表(可能是诸如没有自己的自包含密钥但是其身份的表)由两个或多个外键组成。)
因此,例如,假设您有以下表格:
在您的实体模型中,您应该只添加人员和地址。如果添加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