在运行时更改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(_));
        }
    }

在运行时更改NHibernate模型映射

您可以直接将SQL语句作为异常编写。在我看来,将一个实体复制到另一个DB听起来像是一个例外。

看一下这个答案的例子。

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