2011-05-26 28 views
2

私は2つのテーブルを持って、お店や部門を言うことができます。 [OK]を流暢NHibernateはマッピング問題

ShopTable 
    ShopId 
    ShopName 

DepartmentTable 
    DepartmentId 
    ShopId 
    Name 
    Type 

は、今私はクラス

public class Shop 
    { 
     public virtual int ShopId {get; set;} 
     public virtual string ShopName {get; set;} 
     public virtual Department Toys { get; set; } 
     public virtual Department Hardware { get; set; } 
     public virtual Department Food { get; set; } 
    } 

    public class Department 
    { 
     public virtual int DepartmentId { get; set; } 
     public virtual int ShopId { get; set; } 
     public virtual string Name { get; set; } 
     public virtual DepartmentType Type { get; set; } 
    } 

がどのように私はおもちゃのハードウェアや食品をマッピングん店にshoptableマップ?

public class ShopMap : ClassMap<Shop> 
    { 
     Id(x => x.ShopId); 
     Map(x=> x.ShopName); 
     // How do I map these according to the DepartmentType enum? 
     Map(x=> x.Toys); 
     Map(x=> x.Hardware); 
     Map(x=> x.Food); 
    } 

    public class DepartmentMap : ClassMap<Department> 
    { 
     Id(x => x.DepartmentId); 
     Map(x=> x.ShopId); 
     Map(x=> x.Name); 
     Map(x=> x.Type); 
    } 

答えて

2

あなたが質問に表示クラス構造を使用すると、データベース・テーブルのスキーマを与えやりたいことをサポートしていません。 ShopクラスからDepartmentクラスへの一対多の関係があります。マッピングのために

public class Shop 
    { 
     public virtual int ShopId {get; set;} 
     public virtual string ShopName {get; set;} 
     public virtual IList<Department> Departments { get; set; } 
    } 

    public class Department 
    { 
     public virtual int DepartmentId { get; set; } 
     public virtual Shop Shop { get; set; } 
     public virtual string Name { get; set; } 
     public virtual DepartmentType Type { get; set; } 
    } 

:ここにあなたのテーブル構造を与えられた仕事になるのマッピングがある

public class ShopMap : ClassMap<Shop> 
    { 
     Id(x => x.ShopId); 
     Map(x=> x.ShopName); 

     HasMany(c => c.Departments); 
    } 

    public class DepartmentMap : ClassMap<Department> 
    { 
     Id(x => x.DepartmentId); 

     References(x => x.Shop, "ShopId"); 

     Map(x=> x.Name); 
     Map(x=> x.Type); 
    } 
+0

いや、私は、リストなどのオブジェクトを持つことができることを知っている、しかし、あなたはそれがにISNと言いますどのようにしてもそれらを別々のオブジェクトとして持つことは可能ですか?彼らは、リストにある場合、私は、リストにループに、私はそれらのいずれかにアクセスするたびに持っているだろうから は、私にかなり役立つだろう。 – TuomasK

+0

あなたが望む特定の部門のコレクションを検索することは避けられません。推薦されたクラスはNHibernateがあなたのテーブル構造のための正しいSQLを生成することを可能にします。クラスのプロパティまたはメソッドのいずれかでコレクションの特定のクエリをカプセル化することができます。これらのメソッドやプロパティはNHibernateにマップされないため、データベース操作には影響しません。例えば:公共部門トイ{取得{Departments.FirstOrDefault(D => d.DepartmentId == ToysDepartmentId)。 }} –

+0

コレクションでは、このようにすることができるので少し奇妙です。 。hasManyの(X => x.Departments).KeyColumn( "ShopId")ここで、(Y => y.Type == DepartmentType.Toys)。 – TuomasK

関連する問題