哪个 ORM 最适合这里?
Posted
技术标签:
【中文标题】哪个 ORM 最适合这里?【英文标题】:Which ORM does fit best here? 【发布时间】:2012-06-18 15:17:24 【问题描述】:我需要为一个项目选择一个 ORM,而我只有一些 NHibernate 经验。我一直在阅读 *** 的问答,与我的需求最相似的是What ORM for .net should I use?,但我想有一个更适合当前产品的答案(链接来自 2009 年),并且还考虑到了以下几点我的项目。
对我来说最简单的解决方案是使用 NHibernate,因为它成熟、功能丰富并且我已经使用过它,但我更愿意为项目选择最佳选项,即使我必须再次“学习”。
该项目将作为与 SAP 通信的核心启动。核心必须支持独立和/或相互依赖的模块,并且每个模块都可能需要使用来自数据库的自己的数据。最后一步是实现我们使用的 SAP 部分。我需要的特征是上一个链接中的特征,这里还有一些需要注意的事项:
我希望能够拆分数据访问层,以便拥有一两个模块的用户不需要全部。
设计师将不胜感激。
从大约 20-30 个表开始,几年内,这个数字将增长到数百个。
每个表的寄存器数量从两个或三个到 150000+(非常少)不等。
它不需要是一个单一的产品解决方案。 NHibernate 和 Devart Entity Develop 等组合也受到欢迎。
这个项目的团队也将有学生必须学习 C Sharp,他们中的一些人可能不知道 ORM 到底是什么,所以如果它很简单,或者至少是这样,那就太好了,基本的东西不是很复杂(混合大量的 lambda、反射、扩展方法等)。
最后一个不是很重要。我希望这足够具体以避免被关闭(我链接的问题仍然开放)。
编辑: - 这是一个桌面应用程序。 - 文档和社区也非常重要。
【问题讨论】:
您从未解释过为什么您确信 ORM 是适合您的解决方案。另外,这是一个网络项目还是桌面项目? 我认为 ORM 是正确的解决方案,主要是因为它必须与不同的数据库一起工作。 Jeff Atwood 有一篇很棒的文章,介绍了为什么 ORM 通常不是一个好的解决方案。它链接到一篇有更多细节的长文。看一看,知道你正在进入什么:codinghorror.com/blog/2006/06/… @ashes999 当然,ORM 会带来一些问题,但是文章日期是 2006 年 6 月 26 日。从那以后情况发生了变化,如果我必须协调 10 年以上没有经验的学生和程序员的工作在 FoxPro 中曾经有代码和查询在同一个“屏幕”文件中的经验,现在将开始使用 C#,我更喜欢强加一种访问数据库的方法,我喜欢 ORM 方法。 好吧,如果你想这么想,那就去做吧。 ORM 仍然存在该文章和帖子中概述的许多问题(我从 2010 年开始尝试使用现代 ORM)。只需了解您要进入的内容,这不是灵丹妙药。 【参考方案1】:如今,.Net 最流行的 ORM 是实体框架。它来自 Microsoft,以 MSDN 风格进行了详细记录。它符合您的标准。
我与 NHibernate 合作,发现文档不完整、不一致,有时甚至丢失。大多数时候,我不得不为 Hibernate 使用文档,而不是为 NHibernate 使用文档,只是类似。
EF 可以做同样的事情,而且比 NHibernate 做的更多,并且最新版本有 Migrations,这是缺失的(当我使用 NHibernate 时)。
【讨论】:
我想是的。最近才启动 EF,没有遇到缺乏文档的问题,这与 NHibernate 不同。【参考方案2】:认为它是 Dapper:dapper-dot-net。
Dapper 是一个非常简单的 ORM,由 *** 开发和使用。
缺少文档,但那是因为它很简单。您可以在项目页面或this等一些网站中找到一些使用示例。
【讨论】:
+1。 @CarlosJ - 你提到,“我认为 ORM 是正确的解决方案,主要是因为它必须与不同的数据库一起使用。”如果是这样的话,像 Dapper 这样的轻量级和高效的东西将会有一个很好的优势。我的意思是,我经常使用 EF 编写存储过程以从查询中获得更多性能,然后我会将存储过程添加到 EF 模型中。但如果目的是构建与数据库无关的东西,那么一直编写存储过程就不是一个好策略。 talles 和@Steve Wortham 谢谢,我会看看它,但最后一项不是很重要,因为我可以在开始时处理复杂的部分。 @CarlosJ 哦,对不起,我虽然读到了这很重要。 Talles 和@Steve Wortham:Dapper 是否涵盖了其余的公开标准(以及其他问题的特征)?【参考方案3】:我知道这是一个很老的问题,但我想为任何来到这里的人发布一个答案。查看SQL Data。它使用起来非常简单,功能非常强大,符合所有 OP 的要求。
【讨论】:
以上是关于哪个 ORM 最适合这里?的主要内容,如果未能解决你的问题,请参考以下文章
哪个更适合缩放? ORM 的 distinct() 或 python set()