当我执行诸如以下的查询时:
_domainContext.Users
.Where(u => u.Id == _userContext.User.Id)
.SelectMany(u => u.Houses)
... // more query stuff here
我没有问题。
但是当我这样做时:
_domainContext.Users
.Where(u => u.Id == _userContext.User.Id)
.First()
.Houses
... // more query stuff here
发生错误,例如
发生了关系多重性约束违规:An EntityReference只能有一个相关的对象,但是 查询返回了多个相关对象。
与//中更多查询内容中的内容相关我认为。有人可以解释这两者之间的区别是什么以及为什么会导致问题?
答案 0 :(得分:0)
我不是百分百肯定,但我对这个问题有所了解。它很可能与您的实体映射更相关(我假设这是一个EF项目)。如果您尝试在第一个查询中实际访问.Houses属性,则可能会收到相同的错误。只是第一个实际上没有加载Houses(这可以通过运行SQL跟踪并查看每个查询中调用的SQL来验证)。
我猜你在哪里有代码就是这样的?
modelBuilder.Entity<User>()
.HasRequired(t => t.Houses)
.WithOptional()
.Map(c => c.MapKey("HouseId"));
如果这是正确的,您需要将.WithOptional()更改为.WithMany()。此映射不适用于此处似乎发生的1对多关系。如果这不正确,请你至少发布你的模型映射,并且生成的SQL也可能很好。