2010-12-27 17 views
0

Hey, ich die folgenden Einheiten zur Karte haben:NHibernate - Mapping verbindungs ​​Tisch & Back-Referenzen

class Document 
{ 
    public int DocumentId { get; set; } 
    public DocumentList ContainingList { get; set; } 
} 

class DocumentList 
{ 
    public int DocumentListId { get; set; } 
    public DateTime LastUpdateTime { get; set; } 
    public IList<Doucment> Documents { get; set; } 
} 

Mit der Einschränkung, dass nur ein Document ein bestimmtes Dokument (altough einer Sammlungs- besitzen kann Tabelle existiert hier).

Mapping hat auf den folgenden Tabellen verlassen (die der Einfachheit halber nicht geändert werden kann):

enter code here 

<class name="DocumentList" table="TB_DOC_LIST"> 
    <id name="DocumentListId"> 
    <column name="DOC_LIST_ID"/> 
    <generator class="assigned" /> 
    </id> 
    <property name="LastUpdateTime" column="DOC_LIST_UPDATE_TIME "> 
    <set name="Documents" table="TB_LIST_AND_DOCS"> 
    <key column="DOC_ID"></key> 
    <one-to-many class="Document" /> 
    </set> 
</class> 

:

TB_DOC 
------ 
DOC_ID (int, PK) 
DOC_CONTENT (blob) 

TB_DOC_LIST 
----------- 
DOC_LIST_ID (int, PK) 
DOC_LIST_UPDATE_TIME (datetime) 

TB_LIST_AND_DOCS 
---------------- 
DOC_LIST_ID 
DOC_ID 

So ist die Abbildung i von tohught so sein würde und:

Nun, nach den bekannten Mustern, kann ich nicht herausfinden, wie der Backlink sein sollte vom Dokument zur DocumentList gemappt werden, da ich ein "wired | Eins-zu-Viele-Beziehung hier, gebrochen durch eine dritte Tabelle. Ich möchte auch nicht, dass ein Document-Objekt eine IList referenziert, um dies mit Rückverweisen auf Viele-zu-Viele zu lösen, da jedes Dokument nur eine solche "Eigentümer" -Dokumentliste hat. Irgendeine elegante Idee? Was mache ich hier falsch?

Antwort

0

kann es jetzt nicht testen, aber eine Verknüpfung könnte verwendet werden, um die Referenz-ID zu erhalten.

<class name="Document" table="TB_DOC"> 
    <id name="DocumentId"> 
    <column name="DOC_ID"/> 
    <generator class="assigned" /> 
    </id> 

    <join table="TB_LIST_AND_DOCS"> 
    <key column="DOC_ID"/> 
    <many-to-one class="DocumentList"> 
     <column name="DOC_LIST_ID" /> 
    </many-to-one> 
    </join> 

</class>