MVC控制器中的数据访问

时间:2014-03-18 14:20:51

标签: asp.net-mvc-4 c#-4.0 iis-7 iis-7.5

这是一个理论问题,我将非常感谢专家对IIS 7.5中提供的Web应用程序的一些反馈

我有一个用C#编写的DAO层。在MVC控制器中,当您期望负载较重时,最好在创建控制器时创建DAO实例,然后在每个方法中重用相同的实例,还是在每个方法中创建DAO实例更好?

DAO在创建数据库时会创建新的数据库连接。 DAO中的每个方法也会检查连接的状态,如果它没有打开,它会重新初始化连接。

2 个答案:

答案 0 :(得分:2)

  

DAO确实创建了与数据库的新连接   创建。 DAO中的每个方法也会检查状态   连接,如果没有打开,则重新初始化连接。

这实际上是要走的路。

如果您在数据访问层中使用Entity Framework,则EF会处理与数据库的连接。如果没有,并且您正在使用ADO.NET,您可以让Connection Pooling为您处理。

就像您在Web应用程序环境中一样,对控制器的每个请求都是唯一的,因此,与数据库的新连接是始终创建新连接并销毁它们的方法。根据您是否使用ADO.NET或EF连接并非真正从头开始创建,它们是从连接池中获取的。没有性能损失。实际上这是最好和最正确的方式。

答案 1 :(得分:0)

除非你在创建DAL时做一些非常耗费资源的事情(我认为你的意思是数据访问层中的DAL,而不是DAO,DAO是一种称为数据访问对象的过时技术),所以不要试图在您知道这是一个问题之前优化它。通常,您将创建无价值的附加复杂性,并可能在此过程中创建新的错误。您甚至可能会使性能变差,或者造成数据损坏问题。

如果您在DAL中使用Entity Framework,并且它是一个多用户应用程序,例如Web服务器,那么您绝不应该使用单个实例,因为Entity Framework会保留缓冲区和缓存每个请求,你可以很好地破坏多个用户覆盖它们的那些。