自己對NHibernate一對多,多對一關係映射的一些心得

不知道爲什麼,用代碼生成工具MyGeneration生成映射關係後,只有數據庫字段的,而反應表之間對應關係的一些映射生成不出來,只有手寫,做個備忘。

我理解的不知道對不對,高手看到請指正.

以user(用戶表)和doc(文章表)爲例

user表字段:uid(主鍵)、uname                         實體類Users.cs          命名空間test

doc表字段:docid(主鍵)、doctext、userid       實體類Docs.cs            命名空間test

關係爲:用戶表user 對應 文章表doc 是一對多關係

                文章表doc對應 用戶表user  是多對一關係

 

多對一關係:

文章表doc的xml:

<property name="userid" column="userid" type="int" />

改爲

<!--doc表中的列userid對應Users(用戶表實體類)表的主鍵,Userinfo是用戶表的對象-->
<many-to-one name="Userinfo" column="userid" class="Users,test">
</many-to-one>

文章表doc的實體類     Docs.cs      中加入對User的操作

public virtual Users Userinfo
{
    get;
    set;
}

nhibernate會自動將對應的用戶關聯上。得到用戶:

結果集.Userinfo.uname;

 


一對多關係:

用戶表的xml,加上

<bag name="DocsList" inverse="true" lazy="true" cascade="none">
  <key column="userid" />
  <one-to-many class="Docs,test" />
</bag>

key column表示本表的主鍵要和子表哪個字段對應,這裏爲userid,表示用戶表user的的主鍵uid和Doc表中的userid對應,name="DocsList"表示對應表doc的對象

用戶表user的實體類       Docs.cs      加上

private IList<Docs> _docs;
public virtual IList<Docs> DocsList
{
    get { return _docs; }
    set { _docs= value; }
}

nhibernate會自動將用戶對應的文章關聯上,得到用戶文章數

結果集.DocList.count;

 

注意:

cascade:有all、save-update、delete、none幾個選項,表示  該表做一些操作時 是否作用於 關聯的表,比如在一對多關係中如果cascade="all"時,那麼父表所做的操作都會作用於子表,比如刪除某個用戶,那麼這個用戶下的文章也會關聯一起刪除。

映射屬性:

  • access(默認property):可選field、property、nosetter、ClassName值。NHibernate訪問屬性的策略。
  • cascade(可選):指明哪些操作會從父對象級聯到關聯的對象。可選all、save-update、delete、none值。除none之外其它將使指定的操作延伸到關聯的(子)對象。
  • class(默認通過反射得到屬性類型):關聯類的名字。
  • column(默認屬性名):列名。
  • fetch(默認select):可選select和join值,select:用單獨的查詢抓取關聯;join:總是用外連接抓取關聯。
  • foreign-key:外鍵名稱,使用SchemaExport工具生成的名稱。
  • index:......
  • update,insert(默認true):指定對應的字段是否包含在用於UPDATE或INSERT 的SQL語句中。如果二者都是false,則這是一個純粹的 “外源性(derived)”關聯,它的值是通過映射到同一個(或多個)字段的某些其他特性得到或者通過觸發器其他程序得到。
  • lazy:可選false和proxy值。是否延遲,不延遲還是使用代理延遲。
  • name:屬性名稱propertyName。
  • not-found:可選ignore和exception值。找不到忽略或者拋出異常。
  • not-null:可選true和false值。
  • outer-join:可選auto、true、false值。
  • property-ref(可選):指定關聯類的一個屬性名稱,這個屬性會和外鍵相對應。如果沒有指定,會使用對方關聯類的主鍵。這個屬性通常在遺留的數據庫系統使用,可能有外鍵指向對方關聯表的某個非主鍵字段(但是應該是一個唯一關鍵字)的情況下,是非常不好的關係模型。比如說,假設Customer類有唯一的CustomerId,它並不是主鍵。這一點在NHibernate源碼中有了充分的體驗。
  • unique:可選true和false值。控制NHibernate通過SchemaExport工具生成DDL的過程。
  • unique-key(可選):使用DDL爲外鍵字段生成一個唯一約束。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章