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

时间:2011-03-14 01:13:39

标签: c# linq-to-sql datacontext loadoptions

在LinqToSql LoadOptions上设置DataContext属性时,如果上下文已从其他查询返回结果,则在从查询返回结果后不允许设置加载选项“扔了。

我想知道的是,有没有办法检查DataContext对象是否已经返回了先前查询的结果?

3 个答案:

答案 0 :(得分:1)

嗯,这不是DataContext而是返回结果本身,而是一个查询。查询是延迟加载的,这意味着它们在实际需要结果之前不会访问数据库。例如,调用.ToList(),或循环遍历结果。

仍然没有完全回答你的问题,但我建议在DataContext的构造函数中设置LoadOptions - 或者在实例化之后立即设置。这应该消除这个谜。

答案 1 :(得分:0)

您通常不会将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上执行了查询,而不是在你自己的代码中设置一个标志。

答案 2 :(得分:0)

我遇到了同样的问题....我发现避免异常的唯一方法(因为你甚至无法重置配置)是检查LoadOptions是否为null。如果它为null我设置了新选项,如果它不是我创建一个新的DataContext实例。