在运行时更改NHibernate模型映射
本文关键字:模型 映射 NHibernate 运行时 | 更新日期: 2023-09-27 18:15:41
我正在从数据库中检索具有Guid标识符的实体…我需要将实体保存到另一个数据库并保持相同的Guid标识符。现在,每当我执行保存操作时,NHibernate都会生成一个新的Guid,这是正常的,因为我以这种方式为实体配置了映射文件。是否有可能在运行时修改我的用例的映射?
这是我如何定义ID的映射,如果可能的话,我希望保持这样。
public class OrderMap : ClassMap<Order>
{
public OrderMap()
{
Table("t_Order");
Id(o => o.Id).GeneratedBy.GuidComb();
.....
.....
.....
}
}
这里是我如何尝试更改为IdentifierStrategyGenerator,但没有效果,NHibernate为每个保存操作分配一个新的GUID,我正在失去所需的标识符。
private void UpdateClientDatabase()
{
var key = HibernateMultipleDatabasesManager.Configuration
.GetClassMapping(typeof(Order)).Key as NHibernate.Mapping.SimpleValue;
key.IdentifierGeneratorStrategy = "assigned";
key.NullValue = "undefined";
using (var session = HibernateMultipleDatabasesManager.DataSessionFactory("SQLiteDatabase").OpenSession())
{
_downloadedOrders.OfType<Order>().ForEach(_ => session.Save(_));
}
}
您可以直接将SQL语句作为异常编写。在我看来,将一个实体复制到另一个DB听起来像是一个例外。
看一下这个答案的例子。
Session.GetISession().CreateSQLQuery("insert ....").ExecuteUpdate();