Fluent nhibernate fnhbernate、GeneratedBy.HiLo、hibernate\u unique\u键等
我已经开始使用s#arp体系结构,它使用FNhibernate和GeneratedBy.HiLo生成主键(还有表hibernate_unique_key)。显然,这是推荐的做法,我想坚持下去。现在来谈谈我的问题。我经常使用NHibernate和hbm映射,并且通常使用标识列作为主键。这使我能够使用SQL为数据库设置种子。我可以用前面提到的设置(hibernate_unique_key table等)来完成这项工作吗。我需要这样做,因为SQL insert比使用NHibernate+C#为数据库添加一百万个实体要高效得多。如有任何反馈,将不胜感激。谢谢Fluent nhibernate fnhbernate、GeneratedBy.HiLo、hibernate\u unique\u键等,fluent-nhibernate,Fluent Nhibernate,我已经开始使用s#arp体系结构,它使用FNhibernate和GeneratedBy.HiLo生成主键(还有表hibernate_unique_key)。显然,这是推荐的做法,我想坚持下去。现在来谈谈我的问题。我经常使用NHibernate和hbm映射,并且通常使用标识列作为主键。这使我能够使用SQL为数据库设置种子。我可以用前面提到的设置(hibernate_unique_key table等)来完成这项工作吗。我需要这样做,因为SQL insert比使用NHibernate+C#为数据库添
Christian我想问题在于pk的产生是由nhibernate控制的,而不是db。因此,一个选项是使用instance.GeneratedBy.Identity()。你认为这样做明智吗 如果您有任何意见,我将不胜感激
Christian我想问题在于pk的产生是由nhibernate控制的,而不是db。因此,一个选项是使用instance.GeneratedBy.Identity()。你认为这样做明智吗 如果您有任何意见,我将不胜感激
Christian您应该能够使用普通SQL为数据库种子,并且仍然使用HiLo在NHibernate中生成主键。您需要做的是将HiLo表中的NextHi值设置为足够高的值,以使您保存的下一个实体在为数据库设定种子时获得的id高于设置的最高id 因此,您应该能够执行以下操作:
- 运行模式导出
- 使用自定义sql脚本为数据库设定种子(您必须在脚本中提供自己的id,因为它们不是由数据库生成的)
- 手动在hibernate_unique_key表中插入足够大的值,以便NHibernate生成的下一个id大于种子中插入的最大id
- 像往常一样使用NHibernate
另一个选项是使用GuidComb,这也允许NHibernate生成id,因此无需在插入后查询数据库以获取id。但是,在开发时,您必须查看丑陋的guid,而不是漂亮的整数。:) 您应该能够使用普通SQL为数据库种子,并且仍然使用HiLo在NHibernate中生成主键。您需要做的是将HiLo表中的NextHi值设置为足够高的值,以使您保存的下一个实体在为数据库设定种子时获得的id高于设置的最高id 因此,您应该能够执行以下操作:
- 运行模式导出
- 使用自定义sql脚本为数据库设定种子(您必须在脚本中提供自己的id,因为它们不是由数据库生成的)
- 手动在hibernate_unique_key表中插入足够大的值,以便NHibernate生成的下一个id大于种子中插入的最大id
- 像往常一样使用NHibernate
另一个选项是使用GuidComb,这也允许NHibernate生成id,因此无需在插入后查询数据库以获取id。但是,在开发时,您必须查看丑陋的guid,而不是漂亮的整数。:) 可能有点晚了,但身份生成器将打破UnitOfWork模式 如果在当前会话上执行保存,它将尝试在DB中插入实体,从而破坏UoW的全部含义。 几个小时后,我找到了它损坏的原因,原因是这个身份生成器。我现在使用HiLo生成器 以下链接帮助我解决了这个问题:
可能有点晚了,但身份生成器将打破UnitOfWork模式 如果在当前会话上执行保存,则它将