嗯,我想问题是自我解释。
我在问,因为我正在研究使用DDD方法在SQL Server中使用SQL Server开发这个企业内部网(可能是4个)...因此,我将使用EF或nHibernate。
我知道有关于EF和nHibernate的强烈争论。但是做出决定真的很难。
我喜欢nHibernate,因此我的问题。但除了个人车库项目之外,我还没有看到有人真正使用它。
提前致谢。
答案 0 :(得分:1)
这就是艾恩德所说的:
编写批处理 - 可以将NHibernate配置为批量处理对数据库的所有写入,这样当您需要向数据库写入多个语句时,NHibernate将只进行一次往返,而不是每次都进入数据库言。
读取批处理/多查询/期货 - NHibernate允许将多个查询批量处理到数据库的单次往返,而不是每次查询单独的往返。
批处理集合加载 - 当您延迟加载集合时,NHibernate可以找到其他未加载的相同类型的集合,并在一次访问数据库时加载所有这些集合。这是避免必须处理SELECT N + 1的好方法。
lazy =“extra”的集合 - Lazy extra意味着NHibernate适应您可能在集合之上运行的操作。这意味着blog.Posts.Count不会强制加载整个集合,而是会创建一个“从Posts中选择count(*)BlogId = 1”语句,并且blog.Posts.Contains()同样会产生在一个查询中,而不是支付将整个集合加载到内存的价格。
集合过滤器和分页集合 - 这允许您在实体集合之上定义其他过滤器(包括分页!),这意味着您可以轻松浏览blog.Posts集合,而不必加载整个事情都记忆犹新。 二级缓存 - 管理缓存很复杂,我之前谈到了为什么这很重要,所以我现在就跳过。 调整 - 只要你需要一些超出框架提供的东西,这就是至关重要的。使用NHibernate,几乎在所有情况下,你都有一个扩展点,使用EF,你完全被完全阻止。
整合&可扩展性 - NHibernate有很多扩展项目,比如NHibernate Search,NHibernate Validator,NHibernate Shards等。这些项目不仅不存在EF,而且大部分都不能编写,因为EF没有扩展点可以这么说。
然而,另一方面:
EF 4.0有比当前NHibernate实现更好的Linq提供程序。这是一个积极的工作,NH 3.0将解决这个差距。
EF来自微软。
这是ref:http://ayende.com/blog/4351/nhibernate-vs-entity-framework-4-0