(编辑:我将其更改为社区维基,因为这更适合协作格式。)
有众多的方法可以从.NET访问SQL Server和其他数据库。所有方法都有其优缺点,它永远不会是一个简单的问题,哪种方法是“最好的” - 答案总是“取决于情况”。
然而,我正在寻找在不同级别的系统上比较不同方法和框架的高级别概述。例如,我想象对于一个快速且简单的Web 2.0应用程序,答案会与内部企业级CRUD应用程序非常不同。
我知道Stack Overflow上有很多关于此问题子集的问题,但我认为尝试建立摘要比较会很有用。我将努力更新问题并进行更正和澄清。
到目前为止,这是我在高层次上的理解 - 但我肯定是错的...... 我主要关注微软的方法以保持专注。
ADO.NET Entity Framework
- 数据库无关
- 好处是它允许在后端之间交换
- 不好的地方是它可能影响性能,数据库供应商对此也不太满意
- 似乎是微软未来的首选路线
- 学习起来很复杂(尽管参见267357)
- 通过LINQ to Entities访问,因此提供ORM,从而允许在代码中进行抽象
LINQ to SQL
- 未来不确定 (参见LINQ to SQL是否已死?)
- 易于学习 (?)
- 仅适用于MS SQL Server
- 另请参阅LINQ的优缺点
“标准”ADO.NET
- 没有ORM
- 没有抽象层,因此您需要回到“自己编写”并使用动态生成的SQL
- 直接访问,可能具有更好的性能
- 这与关注对象还是关系数据的古老辩论息息相关,当然答案是“取决于主要工作在哪里”,由于这是一个无法回答的问题,希望我们不必太过深入。在我看来,如果您的应用程序主要是操作大量数据,则不应将其过多地抽象成前端代码中的对象,最好使用存储过程和动态SQL尽可能多地在后端执行工作。而如果您主要有用户交互引起的数据库交互,涉及几十或几百行,则ORM完全有意义。因此,我想为传统的ADO.NET辩护的情况是您操纵和修改大型数据集的情况,这样您将从直接访问后端中受益。
- 当然,另一种情况是您必须访问由存储过程保护的传统数据库。
ASP.NET数据源控件
这些是否完全不同或仅是标准ADO.NET上的一层? - 如果您有DAL或实现了LINQ或实体,则确实会使用这些吗?
NHibernate
- 似乎是一个非常强大的ORM?
- 开源
其他相关链接;
NHibernate或LINQ to SQL Entity Framework与LINQ to SQL 这些问题都涉及到数据访问技术的选择。NHibernate和Entity Framework是ORM(对象关系映射)框架,它们可以将数据库中的表映射到.NET对象,并提供了一种方便的方式来进行CRUD操作。而LINQ to SQL则是一个轻量级的ORM框架,专门用于SQL Server数据库。如果你需要支持多个数据库,或者需要更高级的映射功能,NHibernate和Entity Framework可能更适合你。但是,如果你只需要使用SQL Server,并且对映射要求不高,那么LINQ to SQL可能是更好的选择。
总之,选择哪种技术取决于你的具体需求和偏好。