LoadOptions
在LinqToSql 上设置属性时DataContext
,如果上下文已经从另一个查询返回结果,则抛出异常“从查询返回结果后不允许设置加载选项”。
我想知道的是,有没有办法检查 DataContext 对象以查看它是否已经返回了先前查询的结果?
LoadOptions
在LinqToSql 上设置属性时DataContext
,如果上下文已经从另一个查询返回结果,则抛出异常“从查询返回结果后不允许设置加载选项”。
我想知道的是,有没有办法检查 DataContext 对象以查看它是否已经返回了先前查询的结果?
好吧,不是 DataContext 本身返回结果,而是一个查询。查询是延迟加载的,这意味着它们在实际需要结果之前不会访问数据库。例如,调用 .ToList() 或遍历结果。
仍然不能完全回答您的问题,但我建议在 DataContext 的构造函数中设置 LoadOptions - 或在实例化它之后立即设置。这应该消除神秘感。
您通常不会将 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 上执行查询,而无需在您自己的代码中设置标志。
我遇到了同样的问题....我发现避免异常的唯一方法(因为您甚至无法重置配置)是检查 LoadOptions 是否为空。如果它为空,我设置新选项,如果不是,我创建一个新的 DataContext 实例。