2011-04-28 136 views
1

你好傢伙我試過一段時間尋找解決這個問題的方法。找不到它。 我有兩個類,我將簡化。我的問題是我想要玩家和家族之間的單向一對一映射。現在我看到了一些有外鍵的例子。但我不明白。這個映射不會在ClanLeader的Clans表中生成一個列...我錯過了什麼嗎?謝謝大家的幫助。Nhibernate一對一映射

public class Clan{ 
     private Int32 id; 

       public virtual Int32 Id 
       { 
        get { return id; } 
        set { id = value; } 
       } 

      private string name; 

      public virtual string Name 
       { 
        get { return name; } 
        set { name = value; } 
       } 

       private Player clanLeader; 

       public virtual Player ClanLeader 
       { 
        get { return clanLeader; } 
        set { clanLeader = value; } 
       } 
    } 

那麼我們有映射戰隊:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateSQLite" 
        namespace="NHibernateSQLite" > 

    <class name="GamingOrganizerDomainModel.Clan, GamingOrganizerDomainModel" table="Clans" lazy="false"> 

    <id name="id" access="field" column="Clan_ID" type="Int32"> 
     <generator class="native"></generator> 
    </id> 
    <property name="Name" column="Clan_Name" unique-key="ClanNameConstraint" type="String"/> 


    <one-to-one name="ClanLeader" class="GamingOrganizerDomainModel.Player, GamingOrganizerDomainModel" /> 

    </class> 
</hibernate-mapping> 

接下來是類球員:

public class Player{ 
private Int32 id; 

       public virtual Int32 Id 
       { 
        get { return id; } 
        set { id = value; } 
       } 

      private string nickname; 

      public virtual string Nickname 
       { 
        get { return name; } 
        set { name = value; } 
       } 

} 

和映射的球員:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="NHibernateSQLite" 
        namespace="NHibernateSQLite" > 

    <class name="GamingOrganizerDomainModel.Player, GamingOrganizerDomainModel" table="Players" lazy="false"> 

    <id name="id" column="Player_ID" access="field" type="Int32"> 
     <generator class="native" /> 
    </id> 

    <property name="nickname" access="field" column="Nickname"/> 
</class> 
</hibernate-mapping> 

回答

1

單向一對一關係應映射爲「多對一」元素。 「一對一」用於雙向一對一。有關更多詳細信息,請參見此post。 Howerver也有ConfORM映射,文章很清晰。

你需要做只有一個在你的戰隊映射變化:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="GamingOrganizerDomainModel" 
        namespace="GamingOrganizerDomainModel" > 

    <class name="Clan" table="Clans" lazy="false"> 
     <id name="id" access="field" column="Clan_ID" type="Int32"> 
      <generator class="native"></generator> 
     </id> 
     <property name="Name" column="Clan_Name" unique-key="ClanNameConstraint" type="String"/> 

     <many-to-one name="ClanLeader" class="Player" /> 
    </class> 

你不需要在映射編寫彙編限定類名。 hibernate-mapping元素的程序集和命名空間屬性指定NH嘗試查找特定類的默認命名空間和程序集。

+0

非常感謝。這已經解決了我的問題! – Romulus 2011-04-30 14:41:20

+0

我很高興這個答案有幫助。請將此問題標記爲已回答:)。 – 2011-04-30 14:55:54