新Web应用程序的最佳数据访问方法

时间:2010-04-23 10:56:52

标签: asp.net ado.net

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

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

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

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

由于

5 个答案:

答案 0 :(得分:4)

  

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

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

答案 1 :(得分:2)

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

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

最好的方法是将DAL创建为一个独立的逻辑层,自己的汇编。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

毫无疑问,我会选择Linq2Sql。

下载Linqpad并使用随附的示例开始使用。

答案 4 :(得分:0)

如果您希望在性能方面实现高效的数据访问,那么没有什么比纯ADO.NET更快。你在这里查看:http://ormbattle.net/