我正在构建一个新的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/。