2011-01-21 85 views
1

您可以请与NHibernate架构生成分享您的经验吗?在数据模型的复杂性和大小方面它有多大的可扩展性?与手工制作的数据模型相比,它是否有任何重大的性能影响?NHibernate架构生成

+1

您是否正在专门讨论从类定义生成数据库模式?与手动构建数据库模式以匹配类定义?如果是这样的话,这可能是一个80%的解决方案,非常接近您第一次发布所需的内容。在第一次产品发布后,您必须考虑模式生成实际上不会执行的迁移。 – 2011-01-21 11:27:06

+0

是的Michale,我指的是从类定义生成数据库模式。很高兴知道它非常接近版本1的需求,我认为这将节省大量时间。谢谢。 – patelsan 2011-01-21 15:06:40

回答

2

我发现它对于开发非常有用,当你可以使用它的一些代码来随时重建和重新填充测试数据库。迈克尔关于迁移的观点与我们的经验相符 - 一旦你完成了最初的发布,你需要决定改变生产数据库的另一种方法。我们已经使用了NH模式生成和约30种常见类型的模型(包括每个子类排列的表),并且它生成的定义是正确的,所以对模式的大小没有明显的限制它可以处理。

我现在倾向于认为自动生成的模式几乎总是比手工生成的模式更好的起点,因为软件会为您提供完全一致的东西,并且完全符合您的具体要求。熟练的DBA可以进行的优化类型在您需要调整大量特定的工作负载之前不可能是必需的或有用的。

0

您正在比较苹果和梨。手工制作的模型将始终(完好)执行任何ORM技术。

我个人认为NHibernate性能很好,几乎可以将任何OO模型映射到关系模型,这就是它的优点。有几个疑难杂症就像知道应用程序启动时间,并确保您正确使用会话管理。

我会推荐NHibernate,并且已经使用它18个月,现在在大约80桌左右的模式上,还没有看到任何重大问题。

0

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

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

1

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

查看更多:https://bitbucket.org/guibv/fnst/wiki/Home