2010-05-14 2 views
2

NHibernate에서 Fluent Automapping을 사용하여 어떻게 동적 구성 요소를 자동으로 매핑 할 수 있는지 아는 사람 있습니까?동적 구성 요소 유창 오토 맵핑

일반 클래스를 구성 요소로 매핑 할 수 있지만 사전을 유창한 자동 매핑을 사용하여 동적 구성 요소로 매핑하는 방법을 알 수 없다는 것을 알고 있습니다.

감사

답변

4

우리는 ( 1.2.0.712 FluentNH에) 성공적으로 다음과 같은 방법을 사용했습니다 :

여기
public class SomeClass 
{ 
    public int Id { get; set; } 
    public IDictionary Properties { get; set; } 
} 

public class SomeClassMapping : ClassMap<SomeClass> 
{ 
    public SomeClassMapping() 
    { 
     Id(x => x.Id); 

     // Maps the MyEnum members to separate int columns. 
     DynamicComponent(x => x.Properties, 
         c => 
          { 
           foreach (var name in Enum.GetNames(typeof(MyEnum))) 
            c.Map<int>(name); 
          }); 
    } 
} 

우리가 어디에서 모든 열을 구분하는 데 몇 가지 열거의 모든 구성원을 매핑했습니다 유형은 int입니다. 지금은 우리가 대신 다음과 같습니다 동적 컬럼에 대해 서로 다른 유형을 사용 시나리오에서 일하고 있어요 :이 또한 아주 잘 작동

// ExtendedProperties contains custom objects with Name and Type members 
foreach (var property in ExtendedProperties) 
{ 
    var prop = property; 
    part.Map(prop.Name).CustomType(prop.Type); 
} 

합니다. 난 아직도 파악하려고 해요 무엇

는 ... 어떻게 자신의 매핑이 다른 유형을 참조하는 Map 대신 References을 사용하는 것입니다

UPDATE :이 참조의 경우는 불행하게도 더 복잡 자세한 내용은 this Google Groups thread을 참조하십시오. 짧게 :

// This won't work 
foreach (var property in ExtendedProperties) 
{ 
    var prop = property; 
    part.Reference(dict => dict[part.Name]); 
} 

// This works but is not very dynamic 
foreach (var property in ExtendedProperties) 
{ 
    var prop = property; 
    part.Reference<PropertyType>(dict => dict["MyProperty"]); 
} 

그게 전부입니다.

관련 문제