流畅的NHibernate生成和分配的ID列

我正在使用Fluent NHibernate来处理Web应用程序中的数据持久性。

我的问题…我有一个基类使用GeneratedBy()映射所有具有类型T的ID属性(几乎总是int或GUID)的实体.Identity()

在应用程序启动时,我有一个boot-strapper,它检查并validation所需的种子数据是否已填充。 我的问题是,填充的一些种子数据需要一个特定的ID。 (与枚举或系统用户对应的ID)

有没有办法强制NHibernate使用指定的ID提交记录,而不是自动生成的ID? 之后对存储库的任何其他提交都可以自动生成。

Id(x => x.Id).GeneratedBy.Assigned(); 

如果您希望应用程序分配标识符(而不是让NHibernate生成它们),您可以使用指定的生成器。 此特殊生成器将使用已分配给对象的标识符属性的标识符值。 使用此function分配具有商业意义的密钥时非常小心(几乎总是一个糟糕的设计决策)。

由于其固有特性,使用此生成器的实体无法通过ISession的SaveOrUpdate()方法保存。 相反,如果要通过调用ISessionSave()Update()方法来保存或更新对象,则必须显式指定NHibernate。

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned

您可以使用

 Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1