什么是适合我们需求的轻量级 ORM?
Posted
技术标签:
【中文标题】什么是适合我们需求的轻量级 ORM?【英文标题】:What is a good lightweight ORM for our needs? 【发布时间】:2010-07-06 16:40:59 【问题描述】:好的,我知道“我应该使用什么 X”非常广泛,所以让我缩小我们的使用场景。基本上,我们很久以前就应该使用 ORM。现在,尽管我们无法遍历并重写 C# 代码中生成的每一行 SQL 查询。但我们希望至少朝着正确的方向迈出几步。因此,当我们编写新代码(以及在空闲时间进行重构)时,我们希望转换为某种 ORM。
为此目的,什么是好的 ORM?我们正在使用 .Net 3.5 和 ASP.Net(webforms)。除了一些表具有“动态”模式之外,我们的数据库没有什么特别复杂的地方。我们有大量的视图(虽然 web 应用程序没有使用很多),我们有/使用很少的存储过程。我们的数据库是 SQL Server 2005。我们的价格范围尽可能便宜,并且首选开源。这是一个专有项目,但是我们不能使用 GPL 库等。
关于动态模式:基本上在某些情况下,可以在某些表中添加或删除列(不同类型)。
而且我们的视图使用几乎不存在,我们总是可以取出存储过程代码。我相信数据库中只有 2 或 3 个。
【问题讨论】:
MyBatis.NET(前 iBatis)mybatis.org 和 code.google.com/p/mybatisnet Which ORM for .NET would you recommend?、***.com/questions/3505/… 和 ***.com/questions/206197/… 的可能重复项 @Corbin 我正在寻找更个性化的意见。我对 ORM 完全陌生,但我知道并不是每个 ORM 都能很好地满足我的需求。 @Earlz,我意识到每个人都有独特的需求,但如果我们为每个独特的项目添加一个问题,似乎我们会有令人难以置信的重复。上述问题包含的答案描述了 ORM 适合的优缺点和场景。我认为他们可以在没有全新问题的情况下为您提供帮助。 ***.com/questions/1377236/… 【参考方案1】:海量 - https://github.com/robconery/massive
或
PetaPoco - https://github.com/toptensoftware/petapoco
两者都是单个 .cs 文件,除了 GAC 中的内容之外没有任何依赖项。
(完全披露,PetaPoco 是我写的)
【讨论】:
我第一次听说 PetaPoco。好的。会给它一个旋转。【参考方案2】:我想说,对于 .NET 3.5,您可以使用免费的 LINQ to SQL,它支持视图和存储过程,并且学习曲线很小。我认为您在尝试使用时遇到的唯一问题就是您的“动态模式”表(您可能需要详细说明)。
另一个开源替代方案是 nHibernate,这是一个很棒的 ORM,但在我看来它的学习曲线要陡峭得多。
【讨论】:
一个陡峭的学习曲线,但顶部的景色值得攀登。 查看 FluentNHibernate 和/或 Castle ActiveRecord 以缓解陡峭。【参考方案3】:我会支持贾斯汀建议 Linq-to-SQL - 它真的没有死!
如果这不是您的选择,或者如果您需要反对 SQLite 之类的东西,那么您绝对应该查看 Subsonic 3.0 - 轻量级、易于使用、免费、有源代码 - 随便你。
【讨论】:
Subsonic 的学习曲线非常小,我在我们的项目中启动并运行它并在大约 30 分钟内完成了第一个查询。它似乎是完成这项工作的工具。。 注意:我不会再向任何人推荐 SubSonic。它根本不支持连接。任何连接都会进行全表扫描。但是,BLToolkit 项目类似,但有工作连接【参考方案4】:我喜欢使用SubSonic 来轻松访问数据,它使用 T4 生成类,因此很容易更改正在生成的内容。它更像是一种活动记录样式的数据访问,然后是像 nHibernate 这样的真正 ORM,但 linq to sql 也不是真正的 ORM。
【讨论】:
SubSonic 非常棒,假设您永远不需要进行连接。对于这个项目(当时),我们使用了 SubSonic,一年后,在发现连接存在巨大的性能问题后,在另一个生成 T4 的 ORM 中重写了它(我现在不记得了) 如果你想到这个名字我会很感兴趣我非常喜欢 t4 功能。 只是要更新你。终于想起了我用的 SubSonic 替代品的名字:BLToolkit。更高的学习曲线,但它的连接实际上是连接。不是全表扫描以上是关于什么是适合我们需求的轻量级 ORM?的主要内容,如果未能解决你的问题,请参考以下文章