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