0

데이터베이스에서 GUID 식별자가있는 엔티티를 가져 오는 중 ... 엔티티를 다른 데이터베이스에 저장하고 동일한 GUID 식별자를 유지해야합니다. 이제 NHibernate가 새로운 GUID를 생성합니다. 이 방법으로 엔티티의 매핑 파일을 구성했기 때문에 저장 작업을 수행 할 때마다 이것은 정상적인 작업입니다. 런타임에 사용 사례에 대한 매핑을 수정할 수있는 가능성이 있습니까?런타임에 NHibernate 모델 매핑 변경

ID 매핑을 정의하는 방법은 다음과 같습니다. 가능한 경우이를 유지하고 싶습니다. 내가 IdentifierStrategyGenerator로 변경하려고 어떻게 여기

public class OrderMap : ClassMap<Order> 
{ 
    public OrderMap() 
    { 
     Table("t_Order"); 
     Id(o => o.Id).GeneratedBy.GuidComb(); 
     ..... 
     ..... 
     ..... 
    } 
} 

그리고이 있지만, 효과없이, 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

좀 더 많은 작업이 있지만 두 개의 세션 팩토리를 다른 매핑으로 회전시킬 수 있습니다. – Fran

+0

@Fran에 동의합니다. 실행 시간에 원하는 세션을 삽입 할 수 있습니다. –

답변

0

SQL 문을 예외로 직접 작성할 수 있습니다. 엔티티를 다른 DB에 복사하는 것이 나에게 예외 인 것처럼 들립니다.

예를 들어 this answer을 살펴보십시오.

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