2015-07-20 38 views
1

我做了一些计数相关记录的扩展方法,我不想显式传递DbContext,所以我得到ObjectContext并从中创建一个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

做了一些测试,并且在处理原始连接后,从ObjectContext创建的DbContext不可用。 (“ObjectContext实例已被处置,不能再用于需要连接的操作。”) – Harold

回答

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(); 
+0

嗯,有趣,因为它设置为false导致它不会被丢弃(像你说的),但不可用(例外是ObjectContext被处置)。你会推荐将它设置为true吗? – Harold

+0

将其设置为true,处置新的上下文将处置旧的上下文。猜猜它设置为false将是最好的我的用例,我不需要处置新的dbcontext。 – Harold

+0

OIC ...你是从一个单独的ObjectContext创建多个DBContext,它是从一个init DBContext创建的?你会想创建一个'root'类型的ObjectContext,然后从该单个对象上下文中缓存DBContext ... – drooksy

1

经过一番研究,测试和检查DbContext的源代码我得出的结论并不是必需的。 DbContext只需要处理作为传递的ObjectContext的包装的内部上下文。

如果处置拥有该ObjectContext中的的DbContext,新的DbContext基本上将布置。

相关问题