1

レガシー データベース [サンプル] で次のような状況があります。

table1   
**ID_TABLE1 [PK]   
ID_SOURCE** [PK]   


table2   
**ID_TABLE2 [PK]   
ID_SOURCE** [PK]   


table3   
**ID_TABLE3 [PK]   
ID_SOURCE** [PK][FK]   
ID_TABLE2 [FK]   
ID_TABLE1 [FK]   



 public partial classTable3Map : ClassMap<TABLE3>
    {
        public classTable3Map()
        {
            Table("TABLE3");
            LazyLoad();
            CompositeId().KeyProperty(x => x.ID_TABLE3 , "ID_TABLE3").KeyProperty(x => x.ID_SOURCE, "ID_SOURCE");
          References(x => x.TABLE1).Columns("ID_TABLE1 ", "ID_SOURCE");
          References(x => x.TABLE2).Columns("ID_TABLE2 ", "ID_SOURCE");
        }
    }

このタイプのオブジェクトを保存しようとすると、nhibernate がスローされます

**System.IndexOutOfRangeException**    
  Message=Index xx non valid  for xxxParameterCollection

パラメータよりも多くの入力があることがわかります(ID_SOURCE列が重複しています)

m への関係をマッピングしようとすると、同じ状況になります。

オブジェクト(参照)の代わりにIDをマップし、挿入前に子を保存すると保存できますが、モデルを書き直し、多くの手動調整を行う必要があります。

4

1 に答える 1

0

残念ながら、主キーと外部キーの両方の一部として列を指定することはできません。同様の質問については、ここを参照してください

私が見るオプション:

  • 参照する.Readonly()
  • 参照用にICompositeUserTypeを実装しようとしますが、読み込みとクエリの熱心さが失われます
于 2012-11-07T08:00:01.577 に答える