0

私のデータベースでは、2つのテーブルがあり、1つは論理的に他を参照していますが、外部キーは定義されていません(データベースを制御できないため、例えば:Fluent Nhibernateでのカスタム参照マッピング

Table1 (
    Table1Id int, 
    Column1 int, 
    Column2 int 
) 

Table2 (
    Table2Id int, 
    Column1FromTable1 int, 
    Column2FromTable1 int 
) 

(Column1, Column2)ペアはTable1に対して一意であることを保証があると。コードで

、私はこのように、Table1ためHasManyマッピングを定義したい:

public class Table1 
{ 
    public int Id 
    { 
     get; 
     set; 
    } 

    public IEnumerable<Table2> Table2s 
    { 
     get; 
     set; 
    } 
} 

public class Table2 
{ 
    public int Id 
    { 

    } 

    public Table1 Table1 
    { 
     get; 
     set; 
    } 

} 

public class Table1Map : ClassMap<Table1> 
{ 
    public Table1Map() 
    { 
     Id(x => x.Id).Column("Table1Id"); 
     HasMany(x => x.Table2s); //What next? 
    } 
} 

私はそのために何をする必要がありますか?リファレンスを定義するために使用できる方法はどれですか?OneToManyPart

簡単な言葉で言えば、Fluent NHibernateでは、データベースに縛られていないコードエンティティをどうやって結びつけるのですか?問題は私がここで使用しなければならない複雑なキーにもあります。

この場合でもデータベースを変更することはできませんが、そうでなければ当然の選択です。

答えて

1

あなたはそのような複合キーとしてCol1 & Col2をマップする必要があります。

public class Table1Map : ClassMap<Table1> 
{ 
    public Table1Map() 
    { 
     UseCompositeId() 
       .WithKeyProperty(x => x.Column1 , "Column1") 
       .WithKeyProperty(x => x.Column2 , "Column2"); 
     HasMany(x => x.Table2s) 
       .WithKeyColumn("Column1FromTable1") 
       .WithKeyColumn("Column2FromTable1") ; 
     Map(x => x.Id).Column("Table1Id"); 
    } 
} 

Table2のマッピングで:

public class Table2Map : ClassMap<Table2> 
{ 
    public Table2Map() 
    { 
     Id(x => x.Id).Column("Table2Id"); 
     References(x => x.Table1) 
       .WithColumns("Column1FromTable1", "Column2FromTable1") ; 
    } 
} 
+0

ありがとう!これは間違いなく正しいとはいえ、私は実際にマッピングをテストする前に、私は長い道のりがあるので、マッピングがうまくいくことが証明されたら、後で答えを受け入れることを忘れないでください。 –

+0

さらにもう1つの質問:私はColumn1とColumn2をTable1クラス定義に追加する必要があります。回避する方法はありません。 –

+0

あなたは – Variant

関連する問題