2009-06-24 14 views
4

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はを伝えるにはどうすればよい)

+3

あなたはオブジェクトのデータを非正規化しようとしています...私はちょうどそれが起こるとは思っていません、そしてそれはちょっとORMの目的を破っています。あなたはいつもあなたのテーブルを非正規化することができます。 –

+2

本当にそれを** one **クラスに入れたいのですか? 'LocationName'クラスと' Language'クラスを持つことは受け入れられますか?この場合、関係を 'References()'メソッドとマップすることができます。 –

+0

WithKeyProperty(x => x.LanguageId)をWithKeyReference(x => x.LanguageId)に変更する必要があると思います。 私は何年も流暢ではなかったし、コードで内部マッピングに移った。しかし要点は、PKの一部を参照する必要があるということです。 – Fran

答えて

関連する問題