2つのテーブルを1つのクラスにマッピングするときに問題があります。Fluent NHibernateで2つのテーブルを1つのクラスにマップする方法
私は、次のデータベース・スキーマを持っている:
TABLE dbo.LocationName
(
LocationId INT PRIMARY KEY,
LanguageId INT PRIMARY KEY,
Name VARCHAR(200)
)
TABLE dbo.Language
(
LanguageId INT PRIMARY KEY,
Locale CHAR(5)
)
を、次のクラス定義を構築したい。ここでは
public class LocationName
{
public virtual int LocationId { get; private set; }
public virtual int LanguageId { get; private set; }
public virtual string Name { get; set; }
public virtual string Locale { get; set; }
}
は私のマッピングクラスである:
public LocalisedNameMap()
{
WithTable("LocationName");
UseCompositeId()
.WithKeyProperty(x => x.LanguageId)
.WithKeyProperty(x => x.LocationId);
Map(x => x.Name);
WithTable("Language", lang =>
{
lang.WithKeyColumn("LanguageId");
lang.Map(x => x.Locale);
});
}
問題がされロケールフィールドのマッピングは別のテーブルからのものであり、特にキーbetwこれらのテーブルは一致しません。私はこのマッピングを使用してアプリケーションを実行するたびに私は、起動時に次のエラーを取得する:
外部キー (FK7FC009CCEEA10EEE:言語 [言語ID]))はにLocationName(参照される主 キーと同じ数の列 を持っている必要があります[言語ID、 LocationId]私は唯一の言語IDフィールドを使用してにLocationNameから言語にマッピングするNHibernateはを伝えるにはどうすればよい)
?
あなたはオブジェクトのデータを非正規化しようとしています...私はちょうどそれが起こるとは思っていません、そしてそれはちょっとORMの目的を破っています。あなたはいつもあなたのテーブルを非正規化することができます。 –
本当にそれを** one **クラスに入れたいのですか? 'LocationName'クラスと' Language'クラスを持つことは受け入れられますか?この場合、関係を 'References()'メソッドとマップすることができます。 –
WithKeyProperty(x => x.LanguageId)をWithKeyReference(x => x.LanguageId)に変更する必要があると思います。 私は何年も流暢ではなかったし、コードで内部マッピングに移った。しかし要点は、PKの一部を参照する必要があるということです。 – Fran