亚音速ORM体验

Mal*_*ter 7 .net c# subsonic orm

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

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

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

que*_*rin 13

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

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

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

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

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

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

例如,像这样的查询将不会在亚音速工作,但它会在EF:

db.Accounts.Where(a => a.OwningUser.Email != null);
Run Code Online (Sandbox Code Playgroud)

当我最终要么让许多往返数据库组装的结果,或使用亚音速的CodingHorror类直接与SQL查询,并且是无法简单地兑现他们的POCO(再次,要简单的类,每个表的超越时).

我还发现每个LINQ提供程序都支持不同的操作集,有时相同的逻辑操作在提供程序之间的语法和用法略有不同.这使得编写大多数查询非常耗时且容易出错.SubSonic的LINQ提供商不乏古怪和功能不足.这并不难望其项背到LINQ-2-SQL,实体框架,或LINQ NHibernate的支持的操作,可用性,或执行速度而言吧(是准备学习的书面LINQ只是亚音速加入新的方式- 和准备好让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仍然是一个漏洞抽象,并且它以不同于我以前的方式泄漏.

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