嘿 我必须映射以下实体:
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; }
}
约束条件是只有一个 DocumentList可以拥有一个特定的文档(尽管这里存在一个集合表)。
映射必须依赖于以下表格(为简单起见,这些表格无法更改):
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
所以我认为的映射是这样的:
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>
和
<class name="Document" table="TB_DOC">
<id name="DocumentId">
<column name="DOC_ID"/>
<generator class="assigned" />
</id>
[ ??? ] - property to reference the "owner" document list
</class>
现在,按照已知的模式,我无法弄清楚如何映射从Document到DocumentList的反向链接,因为我在这里有一个“weired | one-to-many关系,被第三个表断开。 我也不希望Document对象引用IList来通过反向引用多对多来解决这个问题,因为每个Document只有一个这样的“所有者”DocumentList。 任何优雅的想法?我在这里误以为是什么?
答案 0 :(得分:0)
现在无法测试它,但可以使用连接来获取引用ID。
<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>