在运行时更改NHibernate模型映射

时间:2016-11-01 08:44:05

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在从数据库中检索带有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(_));
        }
    }

1 个答案:

答案 0 :(得分:0)

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

请查看this answer示例。

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