我为计算相关记录做了一些扩展方法,我不想显式传递DbContext,所以我得到了ObjectContext并从中创建了一个DbContext。
在处理原始DbContext时,新的DbContext是否会被处理?
var original = new CustomDbContext("connectionString")
var entity = original.Table.First()
// in the extension method
var objectContext = entity.GetObjectContext()
var newDbContext = new CustomDbContext(objectContext, false)
// dispose of newDbContext??
// original caller
original.Dispose()
答案 0 :(得分:1)
经过一些研究,测试和检查DbContext的源代码之后,我得出了不需要的结论。 DbContext只需要处理内部上下文,它是传递的ObjectContext的包装器。
如果丢弃拥有ObjectContext的DbContext,新的DbContext将基本上被处理掉。
答案 1 :(得分:0)
从对象上下文构造新的DbContext。将dbContextOwnsObjectContext设置为' true'在放置DbContext时处理ObjectContext,否则调用者必须处置连接。
通过将其设置为false,将不会释放新的DbContext
修改强>
将此objectContext与dbContexts
分开 var objectContext = new ObjectContext("connectionString");
var newDbContext1 = new CustomDbContext(objectContext, false);
var newDbContext2 = new CustomDbContext(objectContext, false);
newDbContext1.Dispose();
newDbContext2.Dispose();
objectContext.Dispose();