2011-02-19 40 views
10

我正在使用流利的NHibernate在Web应用程序中的数据持久性。流利的NHibernate生成和分配的ID列

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

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

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

回答

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

如果您希望应用程序分配标识符(而不是让NHibernate生成它们),您可以使用分配的生成器。这个特殊的生成器将使用已经分配给对象标识符属性的标识符值。使用此功能时,请务必非常小心,以便将密钥分配给业务含义(几乎总是一个可怕的设计决策)。

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

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

1

可以使用

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