次のマッピング コードを検討してください。
public sealed class BankMapping : ClassMap<Bank>
{
public BankMapping()
{
CompositeId()
.KeyProperty(x => x.SerialNumber, "SerialBankRef")
.KeyProperty(x => x.FinancialPeriodId, "FinancialPeriodRef");
Map(x => x.Code);
Map(x => x.Title);
Map(x => x.Comment);
Map(x => x.IsActive);
HasMany(x => x.BankBranchs).KeyColumns.Add(new[] { "SerialBankRef", "FinancialPeriodRef" });
}
}
BankBranch
マッピングコードは次のとおりです。
public sealed class BankBranchMapping : ClassMap<BankBranch>
{
public BankBranchMapping()
{
CompositeId()
.KeyProperty(x => x.FinancialPeriodId, "FinancialPeriodRef")
.KeyProperty(x => x.SerialNumber, "SerialNumber");
Map(x => x.Code);
Map(x => x.Title);
Map(x => x.Comment);
Map(x => x.IsActive);
Map(x => x.Address);
Map(x => x.Fax);
Map(x => x.Telephone);
References(x => x.Bank).Columns(new[] { "SerialBankRef", "FinancialPeriodRef" });
}
}
ご覧のとおり、FinancialPeriodRef
フィールドはマッピングで外部キーおよび複合キーの一部として機能し、NHibernate は DB を正しく構築し、テーブルBankBranch
にレコードを挿入しようとするまではすべて問題ないようです。BankBranch
フィールド ( ) を FK と PK として 2 回System.IndexOutOfRangeException : Invalid index 10 for this SqlParameterCollection with Count=10.
マップしたことを示すエラーが表示され、問題の解決方法がわかりません。FinancialPeriodRef
fromと完全に等しい間、主キーFinancialPeriodRef
のasが必要です。BankBranch
FinancialPeriodRef
Bank
一意の制約を確立するためにこのフィールドが必要であり、複合キーの利点も不可欠です。