多个上下文和MergeOption

时间:2013-08-10 09:30:52

标签: entity-framework

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

0 个答案:

没有答案