如果DbContext是从ObjectContext创建的,我是否需要处理它?
本文关键字:是否 处理 是从 DbContext ObjectContext 创建 如果 | 更新日期: 2023-09-27 18:03:42
我做了一些扩展方法来计数相关记录,我不想显式地传递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()
经过更多的研究、测试和检查DbContext的源代码后,我得出的结论是不需要这样做。DbContext只需要处理内部上下文,它是传递的ObjectContext的包装器。
如果您处置了拥有ObjectContext的DbContext,那么新的DbContext基本上也会被处置。
从对象context构造一个新的DbContext。当将dbContextOwnsObjectContext设置为"true"时,ObjectContext在DbContext被处置时被处置,否则调用者必须处置连接。
通过将其设置为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();