NHibernate - 如何动态切换Id的生成器?

时间:2011-02-23 09:31:53

标签: nhibernate nhibernate-mapping

现在我的所有映射都是hbm.xml。我想在运行时(应用程序启动)动态地将某些实体的Id生成器类型从“identity”切换为“assign”。

这是因为我需要支持从以前的系统导入数据并保留现有的ID。

这可能吗?怎么样?

2 个答案:

答案 0 :(得分:2)

生成器是映射的一部分,因此您需要在创建会话工厂之前更改映射。

使用Fluent或ConfORM很容易。在将XML映射提供给配置之前,可以更改XML映射,但这很麻烦。

只需检查配置标记(启动应用程序时即可更改),然后调用相应的生成器。

答案 1 :(得分:1)

目前尚不清楚为什么需要保留现有ID。我认为你不应该需要保留现有的id。也许你需要保留备用ID?

如果以前的系统有自己的数据库,那么你: 1)需要另一个数据库中另一个表的映射 2)将数据复制到现有数据库(带有密钥标识)

这意味着无论如何你都需要新的身份证。 示例:假设您要复制“航空公司”表,而之前的系统使用“航空公司代码”作为主键。您可以在新数据库中使用整数作为主键,并将航空公司代码用作备用密钥。