在Application_Start中使用DbContext

时间:2014-07-15 08:50:50

标签: c# asp.net-mvc entity-framework unity-container dbcontext

我在尝试理解在Application_Start期间(通过IoC容器)初始化的DbContext会发生什么时遇到问题。

该应用程序是一个MVC4,EF使用存储库,Unity作为IoC容器。 Global.asax

中的情况如下
protected void Application_Start()
{
    // usual MVC init code, routes, bundles etc.

    var container = Bootstrapper.Initialise();

    ViewEngines.Engines.Clear();
    var ve = container.Resolve<AreaAwareRazorEngine>();
    ViewEngines.Engines.Add(ve);
}

AreaAwareRazorEngine 在容器中注册。该引擎需要使用DbContext来完成它的工作。这里的Repo和DbContext似乎被实例化为单身,从某种意义上来说,这是预期的。

DbContext在Unity中注册了PerRequestLifetimeManager,因此在正常浏览网站时,它会在提供请求时被创建和处理。

我遇到的问题是,在elmah日志文件中我可以看到很多与通常的“DbContext已被处理......”相关的错误,我猜测会发生的事情是GC可能(在某些条件)执行传递并处理单例存储库+ DbContext。

我正在考虑的一个解决方案是将ViewEngine注册放在Application_BeginRequest中,但是我想问一下社区这是一个好习惯还是以后会引起问题。我无法在本地测试内容,因为一切正常并且问题仅在部署到生产时(如果可以在IIS级别更改,则会引发问题)。

0 个答案:

没有答案