我已阅读的DbContext对象应为InstancePerHttpRequest,不SingleInstance创建,因为它的线程安全的性质,它可能会消耗requets这使得SENCE之间太多的资源。 但我用它使用的DbContext实例库对象。 我应该让他们InstancePerHttpRequest或使它们SingleInstance和使用DependencyResolver来获得当前的DbContext。
什么将最好的对象创建的设计是,Autofac(或任何其他DI)的DbContext,库和服务基于Web应用程序?
另外一个问题,这是多么昂贵,为每一个仓库或服务的每个Web请求(像他们一样的10-15的请求)不同的DbContext对象?
的DbContext是令人难以置信的便宜实例,所以我不会太担心周围采取让一个新的时间。
我与周围的DbContext范围界定的问题是没有这么多线程安全的查询隔离。 因为任何人都可以调用保存更改并提交整个对象图,你要确保数据库只把它与您的具体变化的背景下。
要了解有关的DbContext的另一个关键问题是,性能会下降,更多的项目被跟踪。 这意味着如果你在单身绑定它可能会导致一些非常严重的性能问题。 (周围有这个,但其真正好方法,注意看我的这个帖子的点击这里 )
我的网络应用程序的个人的偏好是在一个HttpRequest的范围既您的上下文和资源库进行绑定。 这意味着,只有您的当前请求的线程将能够保存更改,这也限制了你很可能会跟踪项目的金额。
对不起了一下我的术语大概不匹配autofac因为我是一个人ninject自己:)
的DbContext是你的工作单位,并因此永远不会适合SingleInstance范围。 对待它。 有时候请求直接映射到一个UOW,但不一定总是如此。 你把它范围请求之前考虑这一点。
的DbContext便宜实例,所以我设计它使得每个服务都有自己的实例。 10-15的要求是好的,除非你遇到一个问题,你可以追溯到实例DbContexts的数量。 还有什么气味像过早优化给我。
我试图保持DI无关,因为我主要使用StructureMap。
文章来源: How should I scope dependency injection of Entity Framework DbContext in a web app? (InstancePerHttpRequest vs SingleInstance)