.net 什么样的大型数据库相关项目不适合使用NHIbernate完成?

.net 什么样的大型数据库相关项目不适合使用NHIbernate完成?,.net,nhibernate,architecture,.net,Nhibernate,Architecture,NHibernate是一个伟大的团队。然而,我认为它的使用必须是有限的(不能是所有问题的答案),在某些情况下,另一种方法应该更好。在这种情况下,“更好”的定义也很有趣 所以我想知道你什么时候不会选择NHibernate而选择另一个(确切地说是哪个?)DB层架构 编辑:当然,当我们谈论大型关系数据库时,我会问一些情况,很明显,它不能解决非关系/sql数据库的任务。NHibernate的主要用途是作为一个对象关系映射器——它在很大程度上消除了面向对象语言和关系数据库之间的阻抗不匹配。因此,简单的答案

NHibernate是一个伟大的团队。然而,我认为它的使用必须是有限的(不能是所有问题的答案),在某些情况下,另一种方法应该更好。在这种情况下,“更好”的定义也很有趣

所以我想知道你什么时候不会选择NHibernate而选择另一个(确切地说是哪个?)DB层架构


编辑:当然,当我们谈论大型关系数据库时,我会问一些情况,很明显,它不能解决非关系/sql数据库的任务。NHibernate的主要用途是作为一个对象关系映射器——它在很大程度上消除了面向对象语言和关系数据库之间的阻抗不匹配。因此,简单的答案是,当阻抗失配不是一个足够大的问题,不足以证明需要额外的抽象层、复杂性和潜在性能降低时,NHibernate可能不合适

从两端来看,这可能不适用于以下应用:

  • 对象/数据模型很简单,并且没有因对象/关系不匹配而产生的显著成本
  • 出于性能、架构或可维护性的原因,靠近数据库的编码非常重要
  • 应用程序具有单向数据流(即,它主要是数据写入程序或数据读取器)

NHibernate仅适用于关系数据库。如果在后端使用NoSQL解决方案(如RavenDB/MongoDB/etc),您将无法使用NHibernate


也就是说,我使用NHibernate来处理上面不适用的每个项目。一旦您完成了与之相关的初始学习曲线,就没有理由不使用它,除非@degorolls提到,在您的应用程序主要是数据编写器的场景中。从使用NHiBiNeT考虑,即使使用简单的应用程序,在数据存储的顶部有一个UI。但是,当您需要处理大量数据时,

NHiBiNT不是最好的选择,例如,当您执行同步或复制任务时。这将是非常缓慢的。在这种情况下,最好使用SQL Server的一些集成服务

另外,若您需要执行非常复杂的查询,那个么查询API也可以帮助您。QueryOver很好,但是当您不需要执行联合和复杂的子查询时。LINQ还不够成熟,无法解决所有与SQL相关的问题