不知道爲什麼,用代碼生成工具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爲外鍵字段生成一個唯一約束。