两者都是很好的解决方案,尽管我个人认为 NHibernate 更适合继承数据库。
NHibernate 有一些明显更好的东西,比如二级缓存支持。文档可能比 EF 少一些,但如果您愿意经历学习曲线,NHibernate 会为您提供更多功能。
FluentNHibernate 非常适合将类类型化映射到底层表,但有些地方您只需要恢复为 XML 映射即可。然而,NHibernate 本身有一个新的竞争 API,我还没有检查过它(上面的博客文章提到了它)。
如果你想依赖 VS 工具支持,EF 更好。然而有时会有一些魔法(例如,EF 甚至可以使用反射来填充对象的私有属性,NHibernate 不会这样做;这取决于您如何看待它,这是一种优势或劣势)。EF 还可以很好地与其他 Microsoft 提供的框架(例如 RIA 服务)配合使用。我也喜欢 EF 自动迁移(当您使用代码优先时)。
如果你想要更多的权力,并且希望能够通过明确的关注点分离来微调事情的工作方式(ORM 只做 ORM 应该做的事情),NH 似乎更好。但是,让 NH 能够访问它们的所有属性都是虚拟的,这有点烦人。
我已经使用了这两种方法,有时生成你想要的 sql 的任何一种方式都会变得有点笨拙;在那些 5-10% 的情况下,再下降一个级别并使用像 Dapper、Massive 或 Petapoco 这样的 micro-orm。
编辑:
NHibernate 似乎也可以填充私有属性,所以这只是我的无知。