0

Я извлекаю объект с идентификатором Guid из базы данных ... и мне нужно сохранить объект в другой базе данных и сохранить тот же идентификатор Guid. Теперь 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(); 
Смежные вопросы