2011-08-08 11 views
0

Nhibernateを覚えました。私はマッピング(正確な関係)に問題があります。 私は2つのテーブルがあります。マッピングファイル(関係)の問題

表1(DIC_TOWN)

TOWN_ID 
    1 
    2 
    3 

表2(DIC_TOWN_STRINGSを)

TOWN_ID LANG_ID  TOWN_NAME 
    1  1   CityName 
    1  2   CityName 
    2  1   CityName 
    2  2   CityName 

私のクラス:

public class TownS 
    { 
     public virtual int TownId { get; set; } 

     public virtual Languages LangId { get; set; } 

     public virtual string TownName { get; set; } 

    } 

EDIT:

私のマッピングファイル:私はマッピングファイルを書き込むための

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="EArchive.Data" namespace="EArchive.Data.Class"> 
    <class name="TownS" table="DIC_TOWN_STRINGS" lazy="false"> 
    <composite-id> 
     <key-property name="TownId" column="TOWN_ID" /> 
     <key-property name="LangId" column="LANG_ID" /> 
    </composite-id>  

    <property name="TownName" column="TOWN_NAME" /> 
    <many-to-one name="LangId" column="LANG_ID"/> 
    </class> 
</hibernate-mapping> 

ヘルプ。可能であれば、説明付きで。ありがとう。

+0

「TownS」と「Languages」のクラスは何ですか? –

答えて

2

テーブルDic_Town_Stringsは両方town_idからなる複合キーを持っていると
をLANG_IDとLANGIDプロパティは、あなたの言語のクラスへのマッピング多対1の関係でマッピングする必要があります(または町はintにプロパティ宣言をLANGID変更する必要があります代わりの言語)

+0

私のマッピングを更新しました。チェックしてください。 – user348173

+0

langIdを2回マッピングしました – sternr

+0

:修正済みですが、次のエラーがあります:LangId – user348173

1

なぜ

public class Town 
{ 
    public virtual int TownId { get; private set; } 

    public virtual Dict<Language, string> AllNames { get; private set; } 

    public virtual string TownName 
    { 
     get { return AllNames[CurrentLanguage]; } 
    } 

} 

マッピング:

<class name="Town"> 
<id ...> 
<map name="AllNames"> 
    <key column="TOWN_ID"/> 
    <index column="LANG_ID"/> 
    <element column="TOWN_NAME" /> 
</map> 

複合キーはありません。すべてがまっすぐです...

+0

Table2には複合キーがあります:TownIdとLangId – user348173

+0

@ user348173:もちろん、idとしてマップされていません。これは重要。コンポジットIDは避けるべきです。 –