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

我不知道是否有更好的方式使用DbContext,因为它不推荐设置为静态时使用WCF。所以我们每次我们要访问数据库时都创建它。

知道使用Entity Framework的所有优点,一些变得无用,因为我们每次重新创建DbContext;并且更多可能导致开销,因为要考虑创建大实体模型的过程。

你有什么意见?

管理生命周期

你是正确的,DbContext的单个静态实例通常不推荐:

The more you use an ObjectContext, generally the bigger it gets.
This is because it holds a reference to all the Entities it has ever
known about, essentially whatever you have queried, added or attached.
So you should reconsider sharing the same ObjectContext indefinitely.

这些注释直接应用于DbContext,因为它包装ObjectContext以公开“简化和更直观的API”。 [see documentation]

建设成本

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

The reality is this cost is actually pretty low, because mostly it
simply involves copying, by reference, metadata from a global cache
into the new ObjectContext. Generally I don’t think this cost is worth worrying about …

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

using(DbContext context = new SomeDbContext())
{
    // Do work with context
}

为了便于测试,您可能希望让您的DbContext实现一些IDbContext接口,并创建一个工厂类ContextFactory< T>其中T:用于实例化上下文的IDbContext。

这允许您轻松地将任何IDbContext交换到您的代码(即,内存上下文为object mocking.)

资源

> MSDN:How to decide on a lifetime for your ObjectContext
> StackOverflow:Instantiating a context in LINQ to Entities

http://stackoverflow.com/questions/7647912/why-re-initiate-the-dbcontext-when-using-the-entity-framework

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 为什么在使用实体框架时重新启动DbContext?