Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体DbQuery对象出现故障_C#_Linq_Entity Framework - Fatal编程技术网

C# Linq到实体DbQuery对象出现故障

C# Linq到实体DbQuery对象出现故障,c#,linq,entity-framework,C#,Linq,Entity Framework,我想知道是否有人能解释一下这里可能发生的事情。我使用的是C#,MVC和实体框架 因此,我运行以下两行代码: var booboo = _context.AppItems.Where(ai => ai.id == 101); var sql = booboo.ToString(); 我有一些奇怪的行为。ToString()方法挂起,因此失败。实际上,booboodbquery对象的任何内容都不能正常工作。 我的AppItem实体在代码中遇到了类似的问题(AppItems可能是DbSet)。

我想知道是否有人能解释一下这里可能发生的事情。我使用的是C#,MVC和实体框架

因此,我运行以下两行代码:

var booboo = _context.AppItems.Where(ai => ai.id == 101);
var sql = booboo.ToString();
我有一些奇怪的行为。ToString()方法挂起,因此失败。实际上,booboodbquery对象的任何内容都不能正常工作。 我的AppItem实体在代码中遇到了类似的问题(AppItems可能是DbSet)。实体框架似乎无法为AppItem实体构造查询

编辑: 我没有足够的耐心!在离开它很长一段时间后,我确实得到了以下例外: Message=内部错误:已达到expression services限制。请在查询中查找可能复杂的表达式,并尝试简化它们 有趣的是,这是一个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; }
}
这很好用;ToString()返回构造好的SQL,一切看起来都井然有序

这对我来说真的很奇怪,没有错误消息或任何东西,应用程序在尝试查询AppItems时只是挂起。该表存在于数据库中,但这并不重要,因为我们没有查询数据库,我们首先无法构造查询


提前感谢您的帮助。

我假设您的查询将返回1项

添加
.FirstOrDefault()只返回一个项(当前查询返回类型为AppItems的IQuerable)

实体框架在需要时才执行查询,因此在代码中,它将在调用.ToString()方法时执行查询

试试这个:

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

if (booboo != null)
{
    var sql = booboo.ToString();

    //etc
}

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

是的,我知道所有这些。如果我运行您发布的代码,应用程序将挂起在第一行。无论我运行什么查询,如果我尝试在任何DbQuery对象上运行任何方法,无论该方法是FirstOrDefault()还是ToString(),应用程序都会挂起。。你试过在它周围放一个试抓块吗?它似乎在悄无声息地运行…数据库也在本地服务器上吗?或者托管在其他地方?try-catch没有帮助,因为它是挂起的,不会产生任何异常。所以它只是卡在try块内的同一条线上。数据库位于同一房间中的单独服务器上。从开发机器访问数据库并对其运行sql查询没有问题。对AppItem表运行sql查询没有问题。数据库不可能成为问题,因为它还没有发展到那个程度。DbQuery对象甚至不能在不挂起的情况下生成SQL字符串。当我将其保留足够长的时间时,出现了一个异常。我编辑了原始问题,并将信息放在那里。
var booboo = _context.AppItems.Where(ai => ai.id == 101).FirstOrDefault();

if (booboo != null)
{
    var sql = booboo.ToString();

    //etc
}