gpt4 book ai didi

c# - Linq to entities DbQuery 对象失败严重

转载 作者:太空宇宙 更新时间:2023-11-03 10:26:32 25 4
gpt4 key购买 nike

我想知道是否有人可以阐明这里可能发生的事情。我正在使用 C#、MVC 和 Entity Framework 。

所以我运行这两行代码:

var booboo = _context.AppItems.Where(ai => ai.id == 101);
var sql = booboo.ToString();

我得到了一些奇怪的行为。 booboo.ToString() 方法挂起,因此失败。事实上,关于 booboo DbQuery 对象的任何东西都无法正常工作。我的 AppItem 实体在整个代码中都遇到了类似的问题(您可能猜到了,AppItems 是 DbSet)。 Entity Framework 似乎无法为 AppItem 实体构建查询。

编辑:我不够耐心!离开很长时间后,我确实收到以下异常:“消息=内部错误:已达到表达式服务限制。请在您的查询中寻找可能复杂的表达式,并尝试简化它们。”有趣的是,这是一个 Sql.Client 异常,这是我没有预料到的。

AppItem 类如下所示:

public class AppItem : Domain.Item
{
public int? UserProfileId { get; set; }
public virtual UserProfile UpdatedByUser { get; set; }

[MaxLength(50)]
public String Type { get; set;}

public DateTime UpdatedDate { get; set;}

// flags
public virtual ICollection<ItemFlag> Flags { get; set; }

// actions
public virtual ICollection<ItemAction> Actions { get; set; }

// notes
public virtual ICollection<Note> Notes { get; set; }
}

Domain Item 包含一个主键字段 (id) 和一些其他字段。

Note/ItemAction/ItemFlag 类都继承自 AppItem,所以可能是某种循环引用造成的?

其他项可以查询就好了。例如,我有许多继承自 AppItem 的类(如 ItemFlag、ItemAction 和 Note),我可以很好地查询所有这些类。因此,其中 Members 是 DbSet,Member 继承自 AppItem:

var foofoo = _context.Members.Where(ai => ai.id = 101);
var sql = foofoo.ToString();

这很好用; foofoo.ToString() 返回构造的 SQL,一切似乎都是有序的。

这对我来说真的很奇怪,没有错误消息或任何东西,应用程序只是在尝试查询 AppItems 时挂起。该表存在于数据库中,但这并不重要,因为我们还没有达到查询数据库的程度,我们一开始就未能构建查询。

在此先感谢您的帮助。

最佳答案

我发现了问题所在。我正在使用 Table-per-Type 进行继承。由于 AppItem 是基本类型,它为查询它而生成的 SQL 查询非常庞大(在本例中为数千行)并且会导致问题。所以基本上,在使用 Table-per-Type 时,您需要避免查询具有多个继承自它们的类型的基类型。

关于c# - Linq to entities DbQuery 对象失败严重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31457094/

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