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がnullかどうかを確認することです。null の場合は新しいオプションを設定し、そうでない場合は新しい DataContext インスタンスを作成します。