我正在创建一个发票功能,我想使用计数器作为发票编号,但是我想知道是否可以在NHibernate中使用现有的身份生成器来获取此属性而不是编写实现?
答案 0 :(得分:0)
虽然NHibernate有很多身份生成器,但Ayende,即 Mr NHibernate 自己提出反对意见:
在我开始之前,我想解释一下 NHibernate完全支持 身份生成器,你可以工作 很容易,没有痛苦。
然而,有一些含义 在你的身份中使用身份生成器 系统。金枪鱼做得很好 详细说明。最常见的问题 你将遇到的是那种身份 打破了工作单元的概念。 当我们使用身份时,我们必须这样做 将值插入数据库中 我们得到它,而不是 推迟到以后的时间。它也是 渲染批处理没用。并且,只是为了增加一些结冰 在蛋糕上。在SQL 2005和SQL 2008上, 身份被打破了。
我知道“选择不会被打破” 当时,但这次,它出现了 它确实: - )
我们强烈建议您使用其他一些 发电机策略,如guid.comb (类似于新的顺序ID)或HiLo (这也产生人类可读的 值)。
答案 1 :(得分:0)
技术上,是的,你可以。他们都是生活在NHibernate.Id
的公共课堂
命名空间,因此您可以随时实例化和使用它们中的任何一个。
但在实践中,这取决于您要使用的是哪一个。其中一些非常简单,不需要任何配置或依赖,例如CounterGenerator
,GuidCombGenerator
或UUIDStringGenerator
。其他人需要会话,如NativeGuidGenerator
。其他人需要先配置才能使用,例如SequenceHiLoGenerator
。
我不认为NHibernate支持使用除ids和idbags以外的生成器,所以使用它们完全取决于你。