我有一个Web应用程序具有:并发用户实体框架 - 适用于企业级应用程序吗?
- 1 TB的DB
- 200+表
- 至少有50桌有超过100万的记录每一个
- 10+开发商
该项目目前使用Ad-Hoc Sql,它是由自定义ORM解决方案生成的。 而不是支持自定义ORM(这是缺少很多高级功能),我想切换到实体框架。
我在一个较小的项目上使用了EF 4.1(Code-First),它工作得很好,但是它对上面的一个更大的项目是可缩放的吗?
我有一个Web应用程序具有:并发用户实体框架 - 适用于企业级应用程序吗?
该项目目前使用Ad-Hoc Sql,它是由自定义ORM解决方案生成的。 而不是支持自定义ORM(这是缺少很多高级功能),我想切换到实体框架。
我在一个较小的项目上使用了EF 4.1(Code-First),它工作得很好,但是它对上面的一个更大的项目是可缩放的吗?
我(高度)同意marvelTracker(和Ayende的)想法。
下面是一些更多的信息,但:
战略重点
使用的GUID作为主键时,有一个著名的成本。它由Jimmy Nilsson描述,并已公开发布在http://www.informit.com/articles/article.aspx?p=25862。 NHibernate支持GUIDCOMB主键策略。但是,要在EntityFramework中实现这一点有点棘手,并且需要额外的步骤。
枚举
的EntityFramework不支持原生枚举。直到这增加了对枚举http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx支持使用替代方法请看映射枚举的唯一途径六月CTP:How to work with Enums in Entity Framework?
查询:
的NHibernate提供了许多方法来查询数据:
的Isession的QueryOver:
// Query that depends on a session:
premises = session.QueryOver<Premise>().List();
独立式QueryOver:
// Full reusable query!
var query = QueryOver.Of<Premise>();
// Then later, in some other part of ther application:
premises = query.GetExecutableQueryOver(session).List(); // Could pass IStateleSession too.
开源
NHibernate的有一个可用的很多贡献项目在http://sourceforge.net/projects/nhcontrib/
这个项目提供了一些非常有用的扩展NHibernate的(其他中):
支持
EntityFramework附带Microsoft支持。 NHibernate的有一个活跃的社区:
而且,看看: http://www.infoq.com/news/2010/01/Comparing-NHibernate-EF-4
适合是一个有趣的术语。它可用吗?是的,你会发现许多非常适合快速应用程序开发的功能。也就是说,它是一种半熟的技术,并且缺少自己的前任LINQ to SQL(甚至是第一次发布3年后)的许多高级功能。这里有一些烦恼:
这就是说,微软已经投入了大量的精力它,希望它会继续改善随着时间的推移。我个人会花时间实现一个抽象的Repository/Unit of Work模式,因此你的代码根本不知道它使用EF,如果有必要,你可以在将来转换到另一个LINQ to DB提供者。
大多数现代化的ORM将从ad-hoc SQL中走出来。
NHibernate是您的最佳选择,因为它具有良好的复杂查询,二级缓存和优化支持。我认为EF正在那里。如果你正在处理Legacy系统,NHibernate是最好的方法。
http://ayende.com/blog/4351/nhibernate-vs-entity-framework-4-0