我刚开始学习Nhibernate。我在映射(精确关系)方面有问题。我有两个表:
Table1 (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>
帮我写映射文件。如果可能的话,解释一下。谢谢。
表Dic_Town_Strings应该有一个由town_id和lang_id组成的复合键
并且LangId属性应该通过多对一关系映射到语言类映射(或者将TownS的LangId属性声明改为int而不是Language)
为什么不
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>
没有复合键,一切都是直接的…