EntitySet に MergeOption を設定すると、その EntitySet に対する後続のすべてのクエリのキャッシュ動作がオーバーライドされます。これは明らかです。
ただし、あるコンテキストの EntitySet で MergeOption を設定すると、他のコンテキストでのすべてのクエリのキャッシュ動作にも影響するようです...
例:
using (var db1 = new context()) {
db1.Table.MergeOption = MergeOption.NoTrack;
using (var db2 = new context()) {
var record = db2.Table.FirstOrDefault();
// record is *detached*
}
}
db2 で別のキャッシュ動作を取得する唯一の方法は、クエリを ObjectQuery に変換してから、クエリの MergeOption を変更することです。次の非常に便利な拡張メソッドを使用します。
public static ObjectResult<T> WithMergeOption<T> (this IQueryable<T> query, MergeOption mergeoption)
{
return (query as ObjectQuery<T>).Execute(mergeoption);
}
これは EntitySet の MergeOption の予想される動作ですか? コンテキスト インスタンスのデフォルトではなく、静的なデフォルトをオーバーライドするかのようにほとんど動作します。