为什么在使用实体框架时重新启动DbContext?

Boo*_*mer 36 .net c# wcf entity-framework-4 dbcontext

我不知道是否有更好的方法来使用,DbContext因为在使用WCF时不建议将其设置为静态.所以我们每次想要访问数据库时都会创建它.

了解使用实体框架的所有优点,有些变得无用,因为我们DbContext每次都在重新创建; 因为要考虑创建大实体模型的过程,所以可能会导致更多开销.

你有什么意见?

Rob*_*Rob 54

管理终身

你是正确的,单一静态实例DbContext通常不建议:

您使用的ObjectContext越多,通常它就越大.这是因为它拥有对其所知的所有实体的引用,基本上是您查询,添加或附加的任何实体.因此,您应该重新考虑无限期地共享相同的ObjectContext.

这些注释直接适用于DbContext,因为它包装ObjectContext了公开"简化和更直观的API". [ 见文件 ]


建设成本

创建上下文的开销相对较低:

实际情况是,这个成本实际上非常低,因为它主要只涉及通过引用将全局缓存中的元数据复制到新的ObjectContext中.一般来说,我不认为这个成本值得担心......

使用短期上下文的常用方法是将其包装在using块中:

using(DbContext context = new SomeDbContext())
{
    // Do work with context
}
Run Code Online (Sandbox Code Playgroud)

为了便于测试,您可能希望让您的DbContext工具具有一些IDbContext接口,并创建一个工厂类ContextFactory<T> where T : IDbContext来实例化上下文.

这允许您轻松地将任何内容交换IDbContext到您的代码中(即内存上下文中的对象模拟).


资源