Fluent NHibernate Mapping not on PK Fieldで説明されている状況と同様の状況があります
ただし、私のテーブル間の関係は、複数の非主キー列によって記述されています。Chris Meek の状況を想像してみてください。ただし、aPerson
には aJobType
と aCode
があり、一緒にすると(申し訳ありませんが、これは古いデータベースです)、a を一意に記述する必要があります。Person
Person
------
Id PK
JobType
Code
Name
Order
-----
Id PK
Person_JobType
Person_Code
OrderDetails
Serhat Özgel の回答では の使用について説明してPropertyRef
いますが、複数の列に対して個別にそれを行う方法が見つかりません。私は似たようなことを試しました
class PersonMap : ClassMap<Person>
{
public PersonMap()
{
HasMany(p => p.Order)
.KeyColumns.Add("Person_JobType")
.PropertyRef("JobType")
.KeyColumns.Add("Person_Code")
.PropertyRef("Code")
}
}
しかし、これは明らかに機能しません。KeyColumns.Add()
別のものを返すOneToManyPart
ためPropertyRef()
、追加されている個々の列に対して実行されていないからです。2つ目PropertyRef()
は最初のものを上書きするだけで、次のエラーが発生します。
NHibernate.MappingException : collection foreign key mapping
has wrong number of columns: MyApp.Person.Order type: Int32
KeyColumns.Add() のさまざまなオーバーロードを見てきましたが、
public TParent Add(string name)
public TParent Add(params string[] names)
public TParent Add(string columnName, Action<ColumnPart> customColumnMapping)
public TParent Add(ColumnMapping column)
具体的には最後の2つですが、各列のレベルを個別に設定する方法が見つかりませんでしたPropertyRef
:(それを行う方法はありますか?これは完全に間違った方法ですか?