【发布时间】:2015-07-16 14:28:19
【问题描述】:
我想知道是否有人可以对这里可能发生的事情有所了解。我正在使用 C#、MVC 和实体框架。
所以我运行这两行代码:
var booboo = _context.AppItems.Where(ai => ai.id == 101);
var sql = booboo.ToString();
我得到了一些奇怪的行为。 booboo.ToString() 方法挂起,因此失败。事实上,booboo DbQuery 对象没有任何东西可以正常工作。 我的 AppItem 实体在整个代码中都遇到了类似的问题(您可能猜到,AppItems 是 DbSet)。实体框架似乎无法为 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 时只是挂起。该表存在于数据库中,但这并不重要,因为我们没有达到查询数据库的程度,我们一开始就无法构造查询。
提前感谢您的帮助。
【问题讨论】:
标签: c# linq entity-framework