0

我正在从数据库中检索具有Guid标识符的实体...我需要将实体保存到另一个数据库并保持相同的Guid Identifier.Right现在,NHibernate正在生成一个新的Guid每次我执行保存操作时,这是正常的,因为我以这种方式为实体配置了映射文件。 有没有可能在运行时为我的用例修改映射?在运行时更改NHibernate模型映射

下面是我如何定义我的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(_)); 
     } 
    } 
+1

我知道这是一个更多的工作,但你可以旋转2个会话工厂与不同的映射。 – Fran

+0

同意@Fran。您可以在运行时注入您选择的会话。 –

回答

0

您可以直接编写SQL语句作为例外。 将实体复制到另一个数据库听起来像是一个例外。

查看示例this answer

Session.GetISession().CreateSQLQuery("insert ....").ExecuteUpdate();