0

다른 프로젝트에있는 다른 클래스 라이브러리와 NHibernate 레이어에 매핑 및 엔티티가 저장된 프로젝트가 있습니다. 내 테스트 프로젝트에서 나는 맵핑을 유창하게 configure ... 맵핑을 통해 추가하고 싶다. assebly를 통해 그리고 개별적으로는 안된다. 아래의 코드에서 하나의 엔티티 만 추가 한 것을 볼 수 있습니다 .. 하지만 다른 어셈블리를 스캔하도록 구성하고 싶습니다. 난 당신이 유형을 필터링하려면NHibernate Fluent 외부 어셈블리 매핑 추가

[Test] 
    public void Can_generate_schemaFluently() 
    { 
     var cfg = new Configuration(); 
     cfg.Configure(); 

     Configuration configuration = null; 
     ISessionFactory SessionFactory = null; 
     ISession session = null; 

     SessionFactory = Fluently.Configure(cfg) 
      *** WOULD LIKE TO ADD MY ASSEBLIES and autoscan for objects instead *** 
      .Mappings(m => m.FluentMappings 
         .Add(typeof(StudentEOMap)) 
       ) 
      .ExposeConfiguration(x => configuration = x) 
      .BuildSessionFactory(); 

     session = SessionFactory.OpenSession(); 

     object id; 
     using (var tx = session.BeginTransaction()) 
     { 
      var result = session.Get<StudentEO>(1541057); 
      tx.Commit(); 
      Assert.AreEqual(result.StudId, 1541057); 
     } 
     session.Close(); 

    } 

답변

1

자동 매핑이

, 당신은 IAutomappingConfiguration을 사용할 수 있습니다 ... 난 그냥 여기에 분명이 .. 어떤 포인터는 크게 감상 할 수 놓친 거지 확신 이 같은 DefaultAutomappingConfiguration에서 파생 : 필터링 할 필요가없는 경우 또한 DefaultAutomappingConfiguration을 사용할 수 있습니다

public class StandardConfiguration : DefaultAutomappingConfiguration 
{ 
    public override bool ShouldMap(Type type) 
    { 
     // Entity is the base type of all entities 
     return typeof(Entity).IsAssignableFrom(type); 
    } 
} 

. 하지만 내 추가 예제에서는 StandardConfiguration을 사용합니다.

SessionFactory = Fluently.Configure(cfg) 
    .Mappings(m => MapMyTypes(m)) 
    .ExposeConfiguration(x => configuration = x) 
    .BuildSessionFactory(); 

을 그리고 MapMyTypes 방법은 다음과 같아야합니다 :

는 FluentNHibernate에 유형을 채우기 위해, 다음과 같이 구성을 변경

private void MapMyTypes(MappingConfiguration m) 
{ 
    m.AutoMappings.Add(AutoMap.Assemblies(new StandardConfiguration(), 
     Assembly.GetAssembly(typeof(Entity)), 
     Assembly.GetAssembly(typeof(OtherAssemblyEntity))) 
    ); 
} 

여러 어셈블리를 추가 할 수 있으며 모든 여과 얻을 StandardConfiguration.

편집

FluentMappings

내가 질문을 오해 것 같다. 매핑을 추가하려면 비슷한 방법을 사용하여 달성 할 수 있지만 IAutomappingConfiguration은 필요하지 않습니다.

private void MapMyTypes(MappingConfiguration m) 
{ 
    m.FluentMappings.AddFromAssembly(Assembly.GetAssembly(typeof(EntityMap))); 
} 

당신은이 같은 FluentMapping과 자동 매핑을 결합 할 수 있습니다 결합 : 는 그냥 MapMyTypes 방법을 변경

private Action<MappingConfiguration> MapMyTypes() 
{ 
    return m => 
    { 
     MapFluent(m); 
     MapAuto(m); 
    }; 
} 
+0

나는 나의 매핑을 포함하는 클래스 라이브러리를 가지고있다. .. 그리고 내 nhibernate 코드와 물론 테스트 lib를 포함하는 클래스 라이브러리. 테스트 lib에서 나는 모든 엔티티 매핑을 포함하고있는 클래스 lib를 스캔하고 싶다. 나는 아직도 각 엔티티 매핑을 제공 할 필요가있는 것처럼 보이는 예제를 보았다. 나는 단지 여기의 솔루션을 보지 않고있다. 우연히 참조하는 것에 대한 문서에 대한 링크가 있습니까? –

+0

@WarrenLaFrance 매핑이 정의 된 Assembly를 제공하면됩니다. 어셈블리는 매핑 클래스 중 하나를 선택하기 만하면되므로 모든 항목을 선택할 필요가 없습니다. Assembly.GetAssembly (typeof (EntityMap))는 클래스가 아닌 어셈블리를 선택하기 만하면됩니다. – Rabban

+0

좋습니다. 포인터에 대한 백만 달러 감사드립니다 ... cfg \t {NHibernate.Cfg. 구성} \t NHibernate.Cfg.구성 - \t \t ClassMappings \t 개수 = 3 –