gpt4 book ai didi

c# - 在 LINQ 查询中使用导航属性会导致关系多重性等问题

转载 作者:行者123 更新时间:2023-11-30 18:39:24 25 4
gpt4 key购买 nike

当我执行如下查询时:

_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

出现错误如

A relationship multiplicity constraint violation occurred: An EntityReference can have no more than one related object, but the query returned more than one related object.

我认为与//更多查询内容中的内容相关。谁能解释一下这两者之间的区别以及为什么会导致问题?

最佳答案

我不是 100% 确定,但我对问题出在哪里有所了解。它很可能与您的实体映射更相关(我假设这是一个 EF 项目)。如果您尝试在第一个查询中实际访问您的 .Houses 属性,您可能会遇到相同的错误。只有第一个并没有实际加载房屋(这可以通过运行 SQL 跟踪并查看在每个查询中调用的 SQL 来验证)。

我猜你在某个地方有类似这样的代码?

modelBuilder.Entity<User>()
.HasRequired(t => t.Houses)
.WithOptional()
.Map(c => c.MapKey("HouseId"));

如果正确,您需要将 .WithOptional() 更改为 .WithMany()。此映射并未为此处似乎发生的一对多关系做好准备。如果这不正确,您能否至少发布您的模型映射,并且生成的 SQL 可能也不错。

关于c# - 在 LINQ 查询中使用导航属性会导致关系多重性等问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com