在 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 的预期行为吗?它几乎表现得好像它覆盖了静态默认值而不是上下文实例上的默认值。