【问题标题】:Methods of pulling data from a database从数据库中提取数据的方法
【发布时间】:2011-05-29 00:13:50
【问题描述】:
我正准备开始一个 C# Web 应用程序项目,只是想要一些关于从数据库中提取数据的意见。据我所知,我可以使用 C# 代码从我的 Web 应用程序背后的代码(即 LINQ)访问数据库,或者我可以调用一个存储过程来收集所有数据,然后用几行代码读取它我的代码后面的代码。我很想知道这两种方法中的哪一种,或任何其他方法,将是最有效、最优雅、面向未来且最容易测试的。
【问题讨论】:
标签:
c#
asp.net
database
web-applications
【解决方案1】:
使用 LINQ to SQL 访问数据可能是目前最糟糕的选择。微软表示,他们将不再改进 LINQ to SQL 以支持实体框架。此外,如果您应该选择走这条路,您可以将 LINQ 与您的 EF 一起使用。
我建议使用像 nHibernate 或实体框架这样的 ORM,而不是 sproc/ADO 方法。在这两个 ORM 之间,我可能会为您推荐 EF,因为您刚刚掌握了这个窍门。 EF 不如 nHibernate 强大,但它的学习曲线更短,而且非常强大。
【解决方案2】:
编写应用程序的最面向未来的方法是在您和您的数据库之间建立一个抽象。为此,您需要使用某种 ORM。我建议使用 NHibernate 或实体框架。
这将为您提供只需编写一次查询而不是多次编写查询的优势(例如:如果您决定更改数据库“从 mssql 移动到 mysql,反之亦然”)。这也为您提供了将所有数据保存在对象中的优势。这比原始的 ado Datatables 或 DataReaders 更容易使用。
【解决方案3】:
大多数开发人员喜欢在背后的代码和数据库之间引入至少一层。
此外,人们在该层中使用了许多数据访问策略。 ADO.NET、实体框架、企业库 NHibernate、Linq 等。
在所有这些中,您都可以使用 SQL 查询或存储过程。我更喜欢存储过程,因为它们对我来说很容易编写和部署。其他人更喜欢使用参数化查询。
当您有这么多选择时,通常表明确实没有明确的赢家。这意味着您可能只需选择一个方向并遵循它,就可以了。
但是你真的不应该使用非参数化查询,也不应该在后面的代码中使用,而是在单独的类中使用