Я извлекаю объект с идентификатором 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(_));
}
}
Я знаю, что это немного больше работы, но вы можете развернуть 2 сеансовых фабрики с различными сопоставлениями. – Fran
Согласовано с @Fran. Затем вы можете ввести сеанс по вашему выбору во время выполнения. –