【问题标题】:Data Access in MVC controllerMVC 控制器中的数据访问
【发布时间】:2014-03-18 14:20:51
【问题描述】:

这是一个理论问题,我希望专家对 IIS 7.5 中提供的 Web 应用程序提供一些反馈

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

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

【问题讨论】:

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


    【解决方案1】:

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

    这实际上是要走的路。

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

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

    【讨论】:

    • 为了强化这一点,不要尝试自己优化连接。 ADO.NET 已经非常有效地做到了这一点,并且它可以在 EF 和 ADO.NET 中自动处理。
    • 感谢您的反馈。我在这个项目上使用 FirebirdSql 而不是 MsSql。使用 FbClient 作为 ADO 对象。在我的连接字符串中,我设置选项 Pooling=true;最小池大小=0;最大池大小=50;。因此,提供这些选项不会与 ADO 冲突,我想这很好。再次感谢。
    【解决方案2】:

    除非您在创建 DAL 时做一些非常耗费资源的事情(我认为您的意思是在数据访问层中的 DAL,而不是 DAO,DAO 是一种称为数据访问对象的过时技术),否则不要尝试优化它在你知道这是一个问题之前。您经常会毫无价值地增加复杂性,并可能在此过程中产生新的错误。您甚至可能会降低性能,或造成数据损坏问题。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多