在高度加载的Web应用程序中正确使用Entity Framework

时间:2015-02-19 10:05:54

标签: c# entity-framework asp.net-mvc-4 architecture

通常使用EF的工作如下:

某些Web控制器调用的方法类似于:

using (var ctx = new EntityContext())
{
    ...
    return something;
}

但我想在高负载的应用程序中,每分钟有几千个请求,它可能会产生问题。 所以我的问题是:手动打开连接并使其保持活动可能是有意义的吗? 如果是的话,是否有人可以为这样的任务共享适当的代码?

提前致谢

2 个答案:

答案 0 :(得分:3)

不,不要试图保持已打开的连接。它只是不起作用,请参阅https://stackoverflow.com/a/9416275/870604

您正在构建ASP.Net MVC应用程序,因此在此用例中,使用Entity Framework的模式非常简单:为每个新控制器实例实例化新上下文 (例如使用依赖注入)。当为每个用户请求创建一个新的控制器实例时,您将为每个请求提供一个新的新EF上下文,这是非常需要的。

不要担心创建大量的上下文实例,每次都不会因连接池而创建新的数据库连接。

如果您希望应用程序具有可伸缩性,那么最好的选择是在您的Entity Framework版本支持时使用异步模式。见http://blogs.msdn.com/b/webdev/archive/2013/09/18/scaffolding-asynchronous-mvc-and-web-api-controllers-for-entity-framework-6.aspx

编辑: 看看this overview of the unit of work pattern with ASP.Net MVC and EF

答案 1 :(得分:0)

关闭using元素的标记后,它会自动关闭连接。所以你不想担心它。但是如果你真的想手动打开连接,请尝试关注(我无法测试它。可能你需要提供连接设置)。

ctx.Database.Connection.Open();