如果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是从ObjectContext创建的,我是否需要处理它?

经过更多的研究、测试和检查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();