レガシー データベース [サンプル] で次のような状況があります。
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をマップし、挿入前に子を保存すると保存できますが、モデルを書き直し、多くの手動調整を行う必要があります。