Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 如何判断LinqToSql DataContext以前是否返回了结果_C#_Linq To Sql_Datacontext_Loadoptions - Fatal编程技术网

C# 如何判断LinqToSql DataContext以前是否返回了结果

C# 如何判断LinqToSql DataContext以前是否返回了结果,c#,linq-to-sql,datacontext,loadoptions,C#,Linq To Sql,Datacontext,Loadoptions,在LinqToSql DataContext上设置LoadOptions属性时,如果该上下文已从另一个查询返回结果,则在从查询返回结果后,不允许引发异常设置load options 我想知道的是,有没有一种方法可以检查DataContext对象,看看它是否已经从以前的查询中返回了结果?您通常不会将DataContext保留足够长的时间来处理这个问题。该类被设计为在创建和销毁方面比较便宜,因此您通常会为单个工作单元创建一个新的DataContext对象,然后将其丢弃。比如: using( var

在LinqToSql DataContext上设置LoadOptions属性时,如果该上下文已从另一个查询返回结果,则在从查询返回结果后,不允许引发异常设置load options


我想知道的是,有没有一种方法可以检查DataContext对象,看看它是否已经从以前的查询中返回了结果?

您通常不会将DataContext保留足够长的时间来处理这个问题。该类被设计为在创建和销毁方面比较便宜,因此您通常会为单个工作单元创建一个新的DataContext对象,然后将其丢弃。比如:

using( var db = new TestDataContext() )
{
    db.LoadOptions = CreateLoadOptions();
    var p = (from person in db.Persons
             where <someCondition>
             select p)
             .First();

    p.SomeProperty = someValue;
    db.SubmitChanges();
}   

我意识到这在技术上并不能回答您的问题,但我不知道有什么方法可以检查是否在DC上执行了查询,除非在您自己的代码中设置一个标志。

您通常不会将DataContext保留足够长的时间,从而遇到这个问题。该类被设计为在创建和销毁方面比较便宜,因此您通常会为单个工作单元创建一个新的DataContext对象,然后将其丢弃。比如:

using( var db = new TestDataContext() )
{
    db.LoadOptions = CreateLoadOptions();
    var p = (from person in db.Persons
             where <someCondition>
             select p)
             .First();

    p.SomeProperty = someValue;
    db.SubmitChanges();
}   

我意识到这在技术上并不能回答您的问题,但我不知道有什么方法可以检查DC上是否执行了查询,除非在您自己的代码中设置一个标志。

好吧,返回结果本身并不是DataContext,而是一个查询。查询是延迟加载的,这意味着在实际需要查询结果之前,查询不会命中数据库。例如,调用.ToList或循环遍历结果


仍然不能完全回答您的问题,但我建议在DataContext的构造函数中设置LoadOptions,或者在实例化它之后立即设置LoadOptions。这应该可以解开谜团。

好吧,返回结果本身并不是DataContext,而是一个查询。查询是延迟加载的,这意味着在实际需要查询结果之前,查询不会命中数据库。例如,调用.ToList或循环遍历结果


仍然不能完全回答您的问题,但我建议在DataContext的构造函数中设置LoadOptions,或者在实例化它之后立即设置LoadOptions。这应该可以解开谜团。

我也有同样的问题。。。。我发现避免异常的唯一方法是检查LoadOptions是否为null,因为您甚至无法重置配置。如果为null,则设置new选项,如果不是,则创建一个新的DataContext实例

我也有同样的问题。。。。我发现避免异常的唯一方法是检查LoadOptions是否为null,因为您甚至无法重置配置。如果为null,则设置new选项,如果不是,则创建一个新的DataContext实例

我实际上已经在做空检查了。我认为发生的情况是,即使LoadOptions为null,在我的例子中,因为第一个查询调用了存储过程,所以仍然会抛出异常。实际上,我已经在进行null检查了。我认为发生的情况是,即使LoadOptions为null,在我的例子中,因为作为第一个查询调用了存储过程,所以仍然会引发异常。我将首先尝试捕获异常,如果这不起作用,我将按照您的建议将工作单元分解为更小的部分,谢谢。如果您将数据上下文保存得太久,那么这不是您可能遇到的唯一问题。你真的应该根据需要重新构造代码来创建这些上下文对象。我将首先尝试捕获异常,如果这不起作用,我将按照你的建议将工作单元分解成更小的部分,谢谢。如果你将DataContext保留得太久,这不是你可能遇到的唯一问题,尽管离它很远。实际上,您应该根据需要重新构造代码以创建这些上下文对象。