亚音速ORM体验

我正在寻找一个重要项目的新ORM,我习惯使用ActiveRecord进行nHibernate,而且我已经对EF4,性能和崩溃的GUI有了非常糟糕的体验。

所以在网上搜索我找到了Subsonic,我喜欢我在文档中看到的内容。

所以,我想知道是否有人已经使用过Subsonic并且体验是否良好。

嗯……好吧……我应该怎么说……

我目前(正如现在)正在努力用PetaPoco取代SubSonic。 我想这说了些什么。

并不是说SubSonic确实很糟糕,但它并不符合我的发展方式。 对于那些希望在此时采用它的人来说,注意到项目中绝对缺乏活动似乎非常重要。

首先,SubSonic不适合我的最大原因是LINQ。

可以肯定的是,编译器检查所​​有属性使用是有吸引力的。 然而,在实践中,它根本不适合查询。

如果你非常贴近每个类和ActiveRecord的使用,我想它没问题。 但每当我们不得不进行任何查询(任何涉及多个表或任何超出最简单的where子句的东西)时,这都是一场噩梦。 关联不能直接在SubSonic LINQ查询中使用,就像在EF或nHibernate中一样,这可能是最大的痛点。

例如,像这样的查询在SubSonic中不起作用,但它会在EF中:

db.Accounts.Where(a => a.OwningUser.Email != null); 

我最终要么在数据库中进行多次往返组装结果,要么使用SubSonic的CodingHorror类直接用SQL查询,并且无法简单地将它们实现为POCO(同样,当超出简单的类时 -表)。

我还发现每个LINQ提供程序都支持不同的操作集,有时相同的逻辑操作在提供程序之间的语法和用法略有不同。 这使得编写大多数查询非常耗时且容易出错。 SubSonic的LINQ提供商不乏古怪和function不足。 它没有接近Linq-2-SQL,entity framework或LINQ来nHibernate它支持的操作,可用性或执行速度的术语(准备好学习在LINQ中为SubSonic编写连接的新方法 – 和准备好让SubSonic的LINQ提供商无法进行一些常见的操作,尽管已知一年的错误 )。

除了拖延生产力之外,很容易忘记您编写的LINQ代码非常特定于提供者。 ANSI SQL比LINQ更标准和交叉兼容。

LINQ也引诱我使用像规范这样的技术重用代码的可能性,但充实它们远非易事,最终的结果甚至不值得付出努力。 我在这里遇到的障碍很大程度上是因为SubSonic的LINQ提供商不支持协会。

SubSonic在LINQ之外的设施我觉得最好是平庸(在我看来)。

其次,重要的是要知道,通过所有措施,SubSonic不是一个活跃的项目。

SubSonic的最初创建者Rob Conery不再参与该项目。 Rob最后一次提交是在2010年7月 。

最近对该项目的承诺是3个月前 , 尽管有近100个悬而未决的问题 。 据我所知,由于Rob停止了SubSonic的工作(尽管仍然围绕该项目的人们已经谈论了超过半年的发布 ),因此我没有发布任何版本,甚至没有任何一点发布。 。

SubSonic的谷歌集团过去很活跃,但现在并没有那么多。 此外,SubSonic项目的官方网站已经黄色筛选了一段时间 (该网站不再是黄色屏幕)。

数据访问的新热点是微ORM。 事实上,SubSonic的创造者有点用Massive来推动这一趋势,不久之后StackExchange工作人员释放了Dapper ,后来PetaPoco出来了。 还有更多。 虽然我们通过在代码库中使用SQL片段放弃了一些编译器检查,但我发现micro-ORM比SubSonic更适合我的开发风格。

我对nHibernate的体验(虽然有限)是因为它对于大多数场景来说过于复杂,即使它很合适也绝对谋杀了我的应用程序启动时间。 还有一个很高的学习曲线(你可能已经过去了),但也有几种方法可以做…基本上所有的东西..所以它只是在我的过程中增加了更多的决定(减慢了我的速度)。

使用PetaPoco,我可以编写熟悉的SQL – 我很快就能很好地使用它 – 并将它们实现为POCO,我知道该怎么做才能立即处理。 一点点的体系结构和组织以及自动化集成测试,我对嵌入SQL的一点都不感到肮脏。

哦,我想最后一件事–SubSonic远非获取数据的最快方式。 可能并不重要,但结果却是对我们而言。

总之(抱歉文字墙):

并不是说SubSonic绝对不是坏事。 它似乎根本不适合我尝试使用它的方式 – 其中很大一部分是因为LINQ仍然是一个漏洞的抽象,并且它以不同于我以前的方式泄漏。

发展努力几乎不存在的事实是好的和坏的。 很好,它很稳定,在某种意义上被认为是“完成”。 糟糕,它缺乏function,可能有一些错误,并不是最好的表现 – 并没有人努力改善这一点。

前段时间,我正在为一个小应用程序寻找一个简单的ORM,而SubSonic正是我所需要的。 设置很简单,我不需要太多时间为我的域类添加一些持久性。 我喜欢它,是基于域类自动迁移数据库模型的选项。

它的缺点是function集相当有限。 我最想念的是获取完整对象图和其他索引支持的选项。 SubSonic将其用作小型应用程序的持久性工具,但对于重要或大型应用程序,我宁愿使用nHibernate或LLBLGen等商业ORM。

在选择ORM之前,您应该决定基本的数据访问要求。 您想使用Active Record模式还是Adapter模式? 那么并发,性能,inheritance等……

我使用Supersonic,只要你使用简单的查询就很好。 当我开始有更复杂的查询时,我发现它缺少LINQfunction。 谷歌搜索后我转到http://bltoolkit.nethttp://bltoolkit.net起(大约2年)我很高兴。 根据http://ormeter.net/是最快的ORM之一。 看看吧,你不会后悔的。