2011-08-08 100 views
0

我剛開始學習Nhibernate。我有映射(確切關係)的問題。 我有兩個表:映射文件的問題(關係)

表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; } 

    } 

編輯:

我的映射文件:

<?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財產應該由多到一個關係到你的語言類映射關係映射(或更改城鎮LANGID財產申報爲int而不是語言)

+0

我已更新我的映射。請退房。 – user348173

+0

你映射LANGID兩次 – 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

表2中有複合鍵:TownId和LangId – user348173

+0

@ user348173:當然,但沒有映射爲id。這個很重要。應避免使用複合標識符。 –