2009-05-22 15 views
1

以下は、Fluent NHibernateを使ってマップしたいクラスモデルとOracleスキーマです。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; } 
} 

テーブルA(NUMBER(38)IDのPK、VARCHAR2(255)名)
テーブルB(NUMBER(38)ID PK FK、NUMBER(38)PK、VARCHAR(255)PROP1、VARCHAR(255入力)Prop2)

どのようにしてFluent NHibernateマッピングクラスを定義する必要がありますか?
必要に応じて新しいドメインクラスを導入しても構いません。私は、次のことを試してみました:次のマッピングクラスと

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; } 
} 

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); 
       }); 
     }); 
    } 

しかし、これは有効な構成を生成しません。誰でも助けることができますか?

+0

これが直接当てはまるかどうかはわかりませんが、私の答えはこちらをご覧ください:http://stackoverflow.com/questions/1875466/auto-mapping-a-idictionarystring-myclass-with-fluent-nhibernate/2807566#2807566 –

答えて

0

クラスBはAのコンポーネントではなく、独自のID(ID、タイプ)を持つ関連エンティティなので、論理的にコンポーネントにはなりません。コンポーネントには独自のID(PK)それらは別々のエンティティになります。