有哪些好的Entity Framework替代方案?

20

我现在正在使用Entity Framework,但因为它不支持全文搜索和其他功能,所以经常需要编写内联SQL。是否有一个ORM支持高级查询并具有许多功能?如果我有时需要编写内联SQL,那么我可能会直接全部使用内联SQL。请问这方面有什么帮助吗?


2
这只是我的个人意见,如果你想要高级查询,可以考虑放弃ORM的想法,改用内联SQL,并注意将持久层代码和业务逻辑分离(这并不意味着拥有代表数据库中表的对象,而是代表意图的对象,这些对象在幕后透明地读写数据库)。类似于Active Record,但更接近意图。 - Frunsi
6
Luke101在这里的观点很有趣:https://dev59.com/ZHI-5IYBdhLWcg3wwLW3#1691790。 - Michael Maddox
EntityWorker.Core是一种新的编程框架,类似于EntityFramework但具有更多的功能,并且比EntityFramework更快。请访问https://github.com/AlenToma/EntityWorker.Core了解更多信息。 - Alen.Toma
12个回答

12

NHibernate是我喜欢的一种较大的ORM替代方案和开源技术。它可以完成一些相当“高级”的事情,但需要经过陡峭的学习曲线。


3
LINQ的支持,嗯,可以说是最差的之一。 - Alex Yakunin

7

我觉得如果我有时需要编写内联SQL,那么我可能会把所有的SQL都写成内联SQL。

真的吗?使用任何ORM时,您总会遇到更好、更干净或更高效的情况,需要使用SQL或调用存储过程。您不应该盲目地相信ORM在所有情况下都能完全胜任。


10
如果为了获得真正的高性能,我必须用汇编语言编写这个过程,那我也可以把我的应用程序的其余部分都用汇编语言编写了...... - Svish
有时候,如果使用ORM做一个包含20个表和子查询的选择语句,会变得太复杂了。在某些情况下,直接使用SQL会更简单。 - PeteT

6

忘记提醒了:目前还没有全文搜索功能。但是这个功能正在开发中,可以参考http://forum.x-tensive.com/viewtopic.php?f=29&t=5657获取一些详细信息。 - Alex Yakunin
DataObjects.Net的LINQ实现非常差,性能非常慢。我强烈建议使用NHibernate作为直接比较 - 它可以做DO.Net可以做的一切,并且把所有事情做得更好。 - nathanchere
这是错误的 - 只需查看支持的功能即可看到差异。因此,我想听到这一点的证明;相反,我可以轻松地证明 NH 中的 LINQ 不支持 DO 和其他 ORM 工具支持的许多功能(例如,请参见 ORMBattle.NET 上的测试);同样也适用于性能。 - Alex Yakunin
只是一个简单的证明你是错误的:http://goo.gl/s2gvP(查看整个部分并将其与NH进行比较)。 - Alex Yakunin
2
页面链接仍然无法正常使用。 - CokoBWare

5

Mindscape LightSpeed 是一款.NET的O/R映射器,支持全文搜索(通过Lucene,但是可扩展,可以添加自己的)。

它还支持LINQ,并且有一个Visual Studio集成的设计器,具有完整的模式往返,所以你可以先设计模型或者先设计数据库,随意选择 :-)。

此外,还有一个免费版本供您使用,以决定是否适合您。

希望这有所帮助。


5
您可能正在寻找CodeFluent Entities,但您需要了解它内部并不依赖于任何ORM或第三方工具。
Entity Framework是一个ORM,而CodeFluent Entities是一个完整的基于模型的软件工厂。它采用自然而直观的建模方法(与Entity Framework集成到Visual Studio中),可以生成数据库脚本、面向对象的数据层代码(C#,VB)、Web服务甚至UI组件。

4
大多数ORM仍然需要时不时地使用一些内联SQL。NHibernate,Linq 2 Sql等没有直接支持全文搜索(NHibernate有NHibernate.Search,使用Lucene.NET执行全文搜索,Linq 2 Sql可以访问您可以创建的使用全文搜索的存储过程)。
这并不意味着您应该完全放弃使用ORM。ORM可以帮助您避免编写大量重复的管道代码,并且通用用例都相对容易执行(例如CRUD操作)。

3

你可能会考虑使用LLBLGen Pro或Telerik的OpenAccess,但NHibernate将是拥有最大社区支持的解决方案。


LLBLGen Pro的性能如何? - Luke101
LLBLGen Pro是最快的ORM之一:https://github.com/FransBouma/RawDataAccessBencher - Frans Bouma

3

我是Rob Conery的SubSonic的粉丝。它(曾经)非常简单易用,设置和使用都很容易。


网站已经死了并且重定向到垃圾邮件页面。 - frankhommers
将链接设置为Git存储库。 - JonSG

2
像这里大多数人一样,我推荐使用 NHibernate,但你可能想要考虑与 CastleProject 的 ActiveRecord 实现一起使用。NHibernate 本身可能需要一点时间适应,但是当你将 ActiveRecord 应用在其上时,事情会变得更加容易。我能够快速地将 EntityFramework 转换为 NHibernate/ActiveRecord。CastleProject's ActiveRecord

有没有关于nhibernate/activeRecord的好书或者非常好的教程?此外,您认为active record的寿命会很长吗?我希望至少能得到10年的支持。谢谢。 - Luke101
很不幸,实际上并不是这样的,这有点痛苦,但也算不上什么大问题。使用Active Record/NHibernate进行大部分数据库集成非常容易,而且Castle网站上的教程基本上提供了你所需的一切。如果Castle网站缺乏相关信息,那么快速在Google/Bing上搜索就会发现很多人在博客中分享他们使用它时学到的东西。至于它能存在多久,因为它是开源的,所以你不必担心它“消失”,只需获取源代码并自行编译,那么你将永远拥有它。 - Arthur C

1

赞同其他人所说的,nHibernate。此外,我发现这个链接与nHibernate有关于全文搜索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接