【问题标题】:Best Data Access Methods for New Web Application新 Web 应用程序的最佳数据访问方法
【发布时间】:2010-04-23 10:56:51
【问题描述】:

我正在构建一个新的 Web 应用程序项目,但对执行数据访问的众多方法感到困惑。我在 SQL 上做后端,有点困惑是使用 LINQ to SQL 还是传统的 ADO.net?

在 ADO.net 上使用 LINQ/SQL 有哪些优点和缺点?

如果是ADO.net,那么获取数据的最佳方式是调用存储过程还是直接调用t-sql代码呢?

我的问题是在 asp.net 中为 web 应用程序创建 DAL 的最干净、最有效和最专业的方法是什么?

谢谢

【问题讨论】:

    标签: asp.net ado.net


    【解决方案1】:

    有什么优点和 使用 LINQ/SQL 的缺点 ADO.net?

    • Linq2sql 生成一系列 是 1 对 1 映射的类 您的(选定的)数据库表 - 这意味着您不必编写繁琐且容易出错的数据访问代码 自己使用 ado.net。
    • 如果您打算使用自定义对象到关系映射(非 1 对 1),Linq2sql 可能无法为您提供足够的价值 - 当然您仍然可以使用 linq2sql,但这意味着在之间。
    • Linq2sql 允许您使用强大的 linq 表达式轻松查询数据库。编写 linq 查询可为您提供智能感知,如果您将查询作为字符串嵌入到 ado.net 命令中,或在管理工作室中编写存储过程,您将无法获得这种感知。
    • 使用 linq,您不需要了解 t-sql,而如果您使用 ado.net,您会知道(尽管如果您的 linq 查询开始做奇怪的事情,这绝对是一个优势!)。编写提供分页结果集的 t-sql 查询的复杂性就是 .Skip(page * size).Take(size)
    • Linq2sql 自动创建使用参数化查询的 t-sql,这比使用字符串构建查询的手写 ado.net 代码更安全地抵御 sql 注入攻击。
    • Linq2sql 不能很好地处理存储过程 - 如果使用存储过程,最好不要使用 linq2sql。
    • 与使用存储过程编写 ado.net 代码相比,Linq2sql 可能需要将数据库表锁定得更松。

    如果是 ADO.net,那么什么是最好的 检索数据的方式意味着 调用存储过程或 直接调用t-sql代码?

    • 如果您排除了 linq2sql,而 ado.net 恰好是数据检索的更好选择,如果您经常甚至根本不直接调用 t-sql 代码,我会感到惊讶。由于使用 linq 的查询过于复杂和/或安全要求,我几乎肯定希望您使用存储过程。

    我的问题是在 asp.net 中为 web 应用程序创建 DAL 的最干净、最有效和最专业的方法是什么?

    • 在我看来,最干净的 DAL 可能会使用 linq2sql,因为它是用于 SQL Server 的最轻量且最具针对性的 ORM(当然,假设您仍然对 SQL Server 感兴趣)。
    • 最有效的可能是使用 ado.net 的手写查询,但这可能是在浪费时间,因为通常情况下,您会发现 linq2sql 之类的工具比 90% 的开发人员编写的查询更好。
    • 在我看来,最专业的 DAL 可能是 linq2sql,但由于更灵活,它更有可能是 NHibernate 的实体框架(正如其他答案所建议的那样)。
    • 就清洁度和专业性而言,我最后选择的 DAL 肯定是手写的 ado.net。

    【讨论】:

      【解决方案2】:

      最好的方法是 O/RM。小型应用 Linq2Sql,大型应用 Entity Framework 4 或 NHibernate (Fluent NHibernate)。

      从您的代码调用 SP 意味着您的应用逻辑位于应用代码之外的其他位置。这是一条可行的路,但由于 TDD,目前越来越不受欢迎。

      最好的办法是把DAL创建成一个独立的逻辑层,自己的程序集。

      【讨论】:

        【解决方案3】:

        毫无疑问,我会选择 Linq2Sql。

        下载Linqpad 并尝试使用包含的示例以开始使用。

        【讨论】:

          【解决方案4】:

          您应该查看一些 ORM 框架,例如 NHibernate:http://nhibernate.info

          【讨论】:

          • 感谢您的回复。我想在 LINQ/SQL 还是 ADO.net 之间做出决定?
          【解决方案5】:

          如果您想要在性能方面高效的数据访问,没有什么比纯 ADO.NET 更快的了。你可以在这里查看:http://ormbattle.net/

          【讨论】:

            猜你喜欢
            • 2016-09-18
            • 1970-01-01
            • 2018-01-21
            • 2010-09-13
            • 2011-02-03
            • 1970-01-01
            • 2015-07-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多