与 C# 4.0 一起使用的最佳 ORM [关闭]

Posted

技术标签:

【中文标题】与 C# 4.0 一起使用的最佳 ORM [关闭]【英文标题】:Best ORM to use with C# 4.0 [closed] 【发布时间】:2010-07-06 15:55:35 【问题描述】:

最好的方法是使用像 Nhibertate 或 Entity Framework 这样的 ORM 或者做一个客户 ORM 。 我将在 C# 4.0 项目中使用这个 ORM

【问题讨论】:

最好的方法就是学习它!也许问题是“我应该选择哪个 ORM 框架?” ... 类似问题:***.com/questions/3172772/… 您能否详细介绍一下您的使用场景? 绝对不是第三个(自定义 ORM)!!! ***.com/questions/1377236/… 【参考方案1】:

2016 年更新

六年后情况大不相同。 NHibernate 几乎被放弃了,其他替代品也被放弃了(例如 Subsonic),Entity Framework 可能是最常见的全功能 ORM,多年来人们一直在转向像 Dapper 这样的微型 ORM,以便从查询映射到具有最小的开销。

应用场景也发生了变化。 Web 服务和 REST API 需要为大量较小的请求提供服务,而不是以内存和性能为代价来加载和缓存一个大对象图。这意味着不再接受完整的 ORM 的开销。

这意味着 Active Record、每个请求的事务等模式和技术已成为吞吐量和可伸缩性杀死反模式

当今最重要的功能之一是异步执行,以减少由于等待导致的线程和 CPU 浪费。 NHibernate 从未进行过这种转换。

原答案

定义“最佳”:它是最成熟、文档更多、社区更大、更主流的吗?

NHibernate 更成熟,功能更丰富,拥有更先进的社区,并且不太可能在 MS 决定再次破坏兼容性时停产。 Entity Framework 更主流,开箱即用。你会发现更多 EF 的初学者书籍,更多 NH 的高级书籍。

一个不错的选择是尝试像 Subsonic 这样更简单的 ORM 之一,并在您了解 ORM 的工作原理、各种陷阱是什么、SELECT N+1 的含义后转向更高级的 ORM [: P]

只是不要尝试创建自己的 ORM,已经有几十个了!亚音速、Castle ActiveRecord、NH、EF(当然)、LLBLGenPro...

【讨论】:

成熟、丰富、高级。这种语言非常具有描述性,当然与他们的首页副本或每个软件门户上的副本几乎不完全相同......谢谢! NHibernate 没有被抛弃--2018 @lll 是的。请注意 日期 - 2010。同时查看 GitHub 中的 contributor graph。早在 2010-11 赛季,NH 就真的被抛弃了。老团队 Ayende、Fabio Maulo 等人停止了贡献。 2012 年,一个全新的团队接手,但花了 5 年 发布了具有异步功能的 NH 5,这是当今的一个关键 功能,尤其是对于 Web 应用程序。 NH 4.0 本质上是一个维护版本。原始代码架构无法处理异步 @lll 现在的一个基本要求是在 .NET Core 上运行良好。 NH 5 本质上是一个仅在 6 个月前发布的 ORM。 EF Core 1 缺少重要的功能,但使用了一些非常聪明的批处理解决方案。 EF Core 2 添加了缺失的功能。哪个更好?太早告诉取决于应用程序的类型。更好的 REST 并不等于更好的桌面。 @lll 驱动程序/提供程序的可用性和质量是另一个问题。 NH 有许多不提供最新功能的 提供商/方言。例如,最新的 SQL Server 是 2012。 EF Core 几乎没有内置提供程序,但任何为 Postgresql 或 mysql 创建 ADO.NET 提供程序的人都会添加 EF 支持。这并不意味着他们总是【参考方案2】:

如果你能花点钱,一定要看看LLBLGEn Pro 3.0

完整的 .NET 4.0 支持,它是一个成熟的产品。很好的支持它也很有用。 广泛的数据库支持(Oracle、MS Sql、Firebird、MySql、PostgreSQL、Sysbase) 不错的设计师,模型优先支持和数据库优先支持

如果您的预算有限,请尝试NHibernate。它也是一个成熟的产品,但它有一个更大的学习曲线。如果您需要一些支持,您可以随时致电 Ayende :-)

对于较小的项目,EF 4.0 是一个不错的选择。

【讨论】:

【参考方案3】:

大多数 ORM 都有自己的长处和短处。

例如,实体框架具有(巨大?)框架本身的优势,但它也相当重量级,并且启动和运行有点困难(更陡峭的学习曲线)。

有一些非常好的、非常易于使用的商业 ORM。我目前在 C# 4 项目中使用Lightspeed,并且对这个特定场景非常满意。

这真的取决于您对 ORM 的需求。如果您想快速轻松地设置和使用,Lightspeed、subsonic 和其他都非常好。如果您需要全功能,那么 Entity Framework 和 NHibernate 是不错的选择。

【讨论】:

【参考方案4】:

从一般的角度来看,将 ORM 称为最佳是完全不可能的。从不同的角度来看,他们每个人都是最好的。您选择了最适合您需求的那一款。 Linq2Sql 在编写时考虑到了性能,但它缺乏对其他提供程序的支持,Linq2Sql 非常快。然而,在处理 SQL 服务器时,还有其他一些可能不如 Linq2Sql 快,但它们支持各种提供程序。最好的办法是列出您希望 ORM 为您的项目提供的功能,然后选择满足您所有需求的功能。您可以提出这些问题来为您的项目选择正确的 ORM。

您希望 ORM 支持哪些数据库提供程序? SQL Server、MySQL、Oracle 等。 您需要 model-first 还是 db-first 支持? 我的性能标准 [内存、处理] 是什么? 您打算在网络应用还是桌面应用中使用它? 您的应用程序中是否有分布式客户端? 名单还在继续……

【讨论】:

【参考方案5】:

在创建 C# 应用程序时,我使用 Linq-to-SQL 作为我的主要 ORM。我最终会转向 Entity Framework,但现在这个框架真的很容易使用而且速度很快。

【讨论】:

【参考方案6】:

我同意@this。 __curious_geek 选择正确的 ORM 取决于您的要求。在 Hibernate 和 Entity Framework 上工作过,我觉得后者对用户更友好,因为它是基于 GUI 的编辑器。在功能丰富方面,NHibernate 具有支持许多数据库提供者的优势。事实证明,定制 NHibernate 比调整实体框架要容易得多。

假设大多数工具都能满足您的核心需求,我更喜欢 NHibernate,因为它是一个充满活力且引人入胜的用户社区,是任何工具的一大优势。

【讨论】:

以上是关于与 C# 4.0 一起使用的最佳 ORM [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 SQlite 上与 Objective-C 一起使用的最佳 ORM 是啥? [关闭]

将 DAO 模式与 ORM 系统一起使用是不是有意义? [关闭]

C# 数据处理设计模式:通过 ORM 存储在 DB 中的对象,直接与数据库一起工作?

使用 Unity 开发的最佳语言? [关闭]

将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是啥? [关闭]

与 Node.js 一起使用的最佳测试框架是啥? [关闭]