映射文件(关系)有问题

本文关键字:有问题 关系 文件 映射 | 更新日期: 2023-09-27 18:04:42

我刚开始学习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>

没有复合键,一切都是直接的…