循环获取" EntityReference只能有一个相关对象"错误

时间:2013-05-27 23:13:05

标签: entity-framework asp.net-mvc-4

我收到此错误:“发生了关系多重性约束违规:EntityReference只能有一个相关对象,但查询返回了多个相关对象。这是一个不可恢复的错误。”

它在循环通过一组对象时发生,在这种情况下,当它到达循环中的第二个对象时。该错误似乎表明我正在循环的列表中的对象的一个​​引用属性抛出此错误。我知道数据在数据库方面是正确的,所以我不确定实际框架在这里看到它不喜欢什么。

这是有问题的流利配置:

modelBuilder.Entity<TemplateSubscriber>()
            .HasRequired(r => r.Role)
            .WithOptional()
            .Map(m => m.MapKey("RoleID"))
            .WillCascadeOnDelete(false);

这个特殊的配置允许我在我的DbMigration中获得正确的SQL,并且我对数据库感到满意,但是EF看到这种关系的方式一定有问题,因为它在尝试加载时会抛出此错误循环中的第二个“TemplateSubscriber”,并且在尝试加载“角色”引用属性时特别看到该错误。

这种关系是一对多的关系,只能从一方获得关系。我无需从角色中访问templateSubscribers列表。所以我想要的是外键关系,以便templateSubscriber必须引用实际角色。

这可能是什么问题?我怎么能看到SQL语句出错了什么,我可能能够诊断我是否能看到SQL。

2 个答案:

答案 0 :(得分:1)

这就是答案:

https://stackoverflow.com/a/9269397/1296464

需要将WithOptional()更改为WithMany()

它没有对数据库进行任何更改,但现在有些东西更好。

答案 1 :(得分:0)

我有类似的问题。我是使用LazyLoading而没有将所有导航属性设置为Overridable(c#virtual)的结果。将导航的一端设置为Overridable而另一端不是。

时发生此错误