我正在使用Fluent NHibernate在Web应用程序中实现数据持久性。
我的问题...我有一个基类,它使用GeneratedBy()映射具有类型T的ID属性(几乎总是int或GUID)的所有实体.Identity()
在应用程序启动时,我有一个boot-strapper,用于检查和验证所需的种子数据是否已填充。我的问题是,填充的一些种子数据需要一个特定的ID。 (与枚举或系统用户对应的ID)
有没有办法强制NHibernate使用我指定的ID而不是自动生成的ID来提交记录?之后对存储库的任何其他提交都可以自动生成。
答案 0 :(得分:27)
Id(x => x.Id).GeneratedBy.Assigned();
如果您希望应用程序分配标识符(而不是让NHibernate生成它们),您可以使用指定的生成器。此特殊生成器将使用已分配给对象的标识符属性的标识符值。使用此功能时,请务必小心分配具有商业含义的键(几乎总是一个糟糕的设计决定)。
由于其固有特性,使用此生成器的实体无法通过ISession的SaveOrUpdate()
方法保存。相反,您必须通过调用Save()
的{{1}}或Update()
方法,明确指定NHibernate是否应保存或更新对象。
http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned
答案 1 :(得分:1)
你可以使用
Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1