2009-05-22 4 views
1

아래는 Fluent NHibernate를 사용하여 매핑하고자하는 클래스 모델과 오라클 스키마입니다.Fluent NHibernate HasMany in Component

public enum EnumA { Type1, Type2, Type3 }; 
public class ClassB 
{ 
    public virtual string Property1 { get; set; } 
    public virtual string Property2 { get; set; } 
} 

public class ClassA 
{ 
    public virtual int ID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IDictionary<EnumA, IList<ClassB>> MyDictionary { get; set; } 
} 

TableA의 (NUMBER (38) ID의 PK, VARCHAR2 (255) 명)
TableB의 (NUMBER (38) ID PK FK, NUMBER (38) PK, VARCHAR (255) Prop1, VARCHAR 타입 (255) Prop2)

Fluent NHibernate 매핑 클래스를 어떻게 정의해야합니까?
필요하다면 새로운 도메인 클래스를 도입해도 괜찮습니다. 다음 매핑 클래스

public ClassAMap() 
    { 
     WithTable("ClassA"); 
     Id(x => x.ID); 
     Map(x => x.Name); 

     HasMany(x => x.MyDictionary).AsMap<EnumA>(d => d.EnumA).Component(c => 
     { 
      c.HasMany(e => e.ClassBList).Component(f => 
       { 
        f.Map(x => x.Property1); 
        f.Map(x => x.Property1); 
       }); 
     }); 
    } 

그러나이 유효한 구성을 생성하지 않습니다와

public class ClassB 
{ 
    public virtual string Property1 { get; set; } 
    public virtual string Property2 { get; set; } 
} 

public class classC 
{ 
    public virtual EnumA EnumA { get; set; } 
    IList<ClassB> ClassBList { get; set; } 
} 

public class ClassA 
{ 
    public virtual int ID { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IDictionary<EnumA, classC> MyDictionary { get; set; } 
} 

: 나는 다음과 같은 노력했다. 아무도 도와 줄 수 있니?

+0

직접 적용 할 수는 없지만 내 대답은 여기를 참조하십시오. http://stackoverflow.com/questions/1875466/auto-mapping-a-idictionarystring-myclass-with-fluent-nhibernate/2807566#2807566 –

답변

0

클래스 B는 자체 ID (ID, 유형)가있는 관련 엔터티이므로 구성 요소가 논리적으로 구성 요소가 될 수 없으며 구성 요소는 자체 ID (PK)가 없으므로 그들은 별도의 개체가 될 것입니다.