我希望NHibernate只有在没有由用户或应用程序手动设置时才为实体生成guid。基本上,当使用新的Guid()(全零)保存对象时,NHibernate应该生成一个。保存具有非零Guid的对象时,应该使用它。
我唯一的选择是编写自己的发电机吗?
编辑有些人,我知道'已分配'。我应该指明我知道它。由于它不能做我想做的事,它不是我正在寻找的选项。编写我自己的生成器是一个有效的选项,但我想要别的东西。我怀疑没有别的。
答案 0 :(得分:2)
这里的问题是NH需要知道对象是新的还是已经存在。它通常通过设置ID来实现。
如果您编写了自己的生成器,则无法解决问题,因为只有在对象是新的时才会调用它。
assigned
生成器。 我会在类'constructor
中生成idclass Entity
{
Guid id;
Entity(Guid id = Guid.Empty)
{
if (id == Guid.Empty) this.id = Guid.NewGuid();
else this.id = id;
}
}
答案 1 :(得分:1)
您是否尝试过设置unsaved-value
属性?
<id name="Id" column="Id" type="Guid" unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid.comb" />
</id>
编辑现在我完全理解你的问题另一种选择,而不是推出自己的发电机就是使用
<generator class="assigned" />
但是您无法使用SaveOrUpdate()
。相反,如果要通过调用ISession的Save()或Update()方法来保存或更新对象,则必须明确指定NHibernate。此外,您始终需要在所有新实体上手动设置GUID。这是一个选择。