NHibernate模式生成

NHibernate模式生成,nhibernate,database-design,orm,Nhibernate,Database Design,Orm,您能分享一下您在NHibernate模式生成方面的经验吗?就数据模型的复杂性和大小而言,它有多大的可伸缩性?与手工制作的数据模型相比,它对性能有什么重要影响吗?您正在比较苹果和梨。手工制作的模型将始终(很好地应该)优于任何ORM技术 我个人认为NHibernate的性能很好,几乎可以将任何OO模型映射到关系模型,这就是它的优点。这里有一些技巧,比如了解应用程序启动时间,确保正确使用会话管理 我会推荐NHibernate,并且已经在包含大约80个表的模式上使用它18个月了,而且还没有发现任何重大问

您能分享一下您在NHibernate模式生成方面的经验吗?就数据模型的复杂性和大小而言,它有多大的可伸缩性?与手工制作的数据模型相比,它对性能有什么重要影响吗?

您正在比较苹果和梨。手工制作的模型将始终(很好地应该)优于任何ORM技术

我个人认为NHibernate的性能很好,几乎可以将任何OO模型映射到关系模型,这就是它的优点。这里有一些技巧,比如了解应用程序启动时间,确保正确使用会话管理


我会推荐NHibernate,并且已经在包含大约80个表的模式上使用它18个月了,而且还没有发现任何重大问题。

我发现它对于开发非常有用,当您可以将它与一些代码一起使用时,可以随意重建和重新填充测试数据库。Michael关于迁移的观点与我们的经验相符——一旦发布了初始版本,您就需要决定另一种更改生产数据库的方法

FWIW,我们已经使用NH模式生成了大约30个常见类型的模型(包括每个子类安排一个表),并且它生成的定义是正确的,因此它可以处理的模式的大小没有明显的限制


我现在倾向于认为,自动生成的模式几乎总是比手工制作的模式更好的起点,因为软件将为您提供完全一致且完全符合您指定的内容。一个熟练的DBA所能做的各种优化,在您有一个大的、特定的工作负载需要调整之前,不太可能是必要的或有用的

我想说,没有任何性能影响。事实上,如何创建表以适应映射文件没有很多选项。还有一些仅用于创建模式的附加功能,例如可以指定数据库数据类型、创建约束和索引,以及在创建模式时运行任意sql


性能调优通常可以在自动创建模式之后完成。例如,您可以让NH创建表,并运行一些
altertable
语句来设置一些与性能相关的设置。之后创建(或替换)索引也非常容易。所有这些甚至可以写入映射文件。NH仍在努力工作:根据已经存在的信息(映射文件)创建所有表和列。

如果需要导出模式并填充数据库,您希望看到Fluent NHibernate模式工具。它能够读取程序集、hibernate.cfg.xml、*.hbm.xml和Fluent映射。您可以生成/执行数据库的DDL(创建/更新/删除表),它接受一个类似CSV的输入文件,用于填充创建/更新的数据库(数据集文件接受在HQL中完成的小查询)。此工具对于使用NHibernate的单元测试和Web应用程序非常有用


请参阅更多:。

您是在专门讨论从类定义生成数据库架构吗?与手工制作数据库模式以匹配类定义相比?如果是这样的话,它可能是一个80%的解决方案,并且非常接近第一个版本所需要的。在第一个生产版本发布之后,您必须考虑模式生成并没有真正完成的迁移。是的,Michale,我指的是从类定义生成db模式。很高兴知道它非常接近版本1的需求,我认为它将节省大量时间。谢谢。很高兴知道它在80张桌子和18个月的时间里运行良好。我知道手工制作的DB模型会更好,这就是为什么我提到是否有任何“主要性能影响”。