亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

NHibernate:如何用一對多的關系來表示多到多的關系?

NHibernate:如何用一對多的關系來表示多到多的關系?

我在網上讀過一篇文章(我再也找不到那篇文章了),一段多到多的關系可以被一對多的關系所取代。有人能舉個例子嗎?
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

我只是想問這個問題,然后意識到,沒有任何答案。這是一個遺憾,盡管我經常指出NHibernate文檔聲明:24.最佳做法

不要使用外來的關聯映射。

真正的多到多關聯的良好用法是罕見的。大多數情況下,您需要存儲在“鏈接表”中的其他信息。在這種情況下,對中間鏈接類使用兩個一對多的關聯要好得多。事實上,我們認為大多數的關聯是一對多的和多對一的,在使用任何其他的關聯風格時,你應該小心,并問自己是否真的有必要。

下面的示例23.2.作者/作品..摘錄,簡化版本的多到多的關系AuthorWork:

<class name="Work" table="works" ...>
        <id name="Id" column="id" generator="native" />
        ...        <set name="Authors" table="author_work" lazy="true">
            <key>
                <column name="work_id" not-null="true"/>
            </key>
            <many-to-many class="Author">
                <column name="author_id" not-null="true"/>
            </many-to-many>
        </set></class>

它的多對多目標作者:

<class name="Author" table="authors">
  ...  <set name="Works" table="author_work" inverse="true" lazy="true">
     <key column="author_id"/>
     <many-to-many class="Work" column="work_id"/>
  </set></class>

因此,如果我們想訂購這套裝貨工程,我們確實有一個問題。對表中沒有列。但更重要的是,沒有辦法管理這樣的專欄。

我們所能做的就是引入對偶對象:AuthorWork并根據需要擴展對表。

public class AuthorWork{

    public virtual Author Author { get; set; }
    public virtual Work Work { get; set; }
    public virtual int OrderBy { get; set; }}

AuthorWork的映射

<class name="AuthorWork" table="author_work">
    ...    <many-to-one name="Author" column="author_id" />
    <many-to-one name="Workr"  column="work_id" />
    <property name="OrderBy" />

有了這個,我們可以將多到多的映射轉換為一對多的映射,例如作者集合:

<set name="Authors" lazy="true"
  order-by="OrderBy">
  <key column="work_id" not-null="true"/>
  <one-to-many class="AuthorWork" /></set>

我們可以管理實體AuthorWork,設置OrderBy列,從而有效地處理配對表。

注:必須同意這一建議,在綜述中提出的要求越多,我們就越高興我們有辦法來管理這種關系!


查看完整回答
反對 回復 2019-07-13
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

由于關系DBMS通常不支持多到多關系,所以這些關系使用一個鏈接表和兩個一對多的關系來表示。例如,多到多之間的關系UserS和Roles表示為User one-to-many UserRoles many-to-one Role..NHibernate通常隱藏這一點,并允許多到多的關系商店透明。如果需要,可以始終選擇顯式地映射鏈接表。你會給我地圖UserRole  UserRoles,在哪里UserRoles包含兩個多對一的關系(到User和一個Role分別)在這種情況下User也不Role的收藏(一對多)UserRoles實例(或者至少它們可以是反向的)。這對于減少內存占用非常有用,因為您需要將較少的集合加載到內存中。缺點是查詢變得更加復雜。

查看完整回答
反對 回復 2019-07-13
  • 2 回答
  • 0 關注
  • 519 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號