真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Nhibernate3.0Cookbook學習筆記利用XML映射類-創(chuàng)新互聯(lián)

本文基于Nhibernate 3.0 Cookbook,下載地址:http://home.cnblogs.com/group/topic/42850.html

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務鶴山,10余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220

準備工作,下載Nhibernate:http://sourceforge.net/projects/nhibernate/files/NHibernate/3.0.0.GA/

因為是基于Nhibernate 3.0 Cookbook,所以用的版本也是書上的一致,不是最新的。

下面我們來說說如何通過配置類的XML文件,最后在數(shù)據(jù)庫中生成相應的表。

一 創(chuàng)建一個簡單的類映射。

 1.新建一個類庫項目:Eg.Core,并將解決方命名為:CookbookDemo。

 2.在解決方案目錄下,新建一個文件夾:Lib,并將下載的Nhibernate中Required_Bin folder和Required_For_LazyLoadingCastle目錄中的文件解壓到些文件夾中。

 3.在類庫項目:Eg.Core中,新建一個類Entity,代碼如下:

public abstract class Entity
    {
public virtual Guid Id { get; protected set; }
    }

4.在新建一個類:Product

 public class Product : Entity 
    {
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual Decimal UnitPrice { get; set; }
    }

5.在項目Eg.Core中添加一個XML文件,命名為:Product.hbm.xml,右鍵該XML文件,選擇屬性,將生成操作改成:嵌入的資源。這個很重要,不然Nhbernate會找不到你所配置的XML文件。

  打開Product.hbm.xml,配置hibernate-mapping如下:

PS:為了讓配置XML時出現(xiàn)智能提示,在下載的NHibernate中找到configuration.xsd和nhibernate-mapping.xsd兩個文件并復制到你的VS安裝目錄:X:Program FilesMicrosoft Visual Studio 9.0XmlSchemas目錄即可。

 6. 這樣,Eg.Core項目就完成了,點擊生成,確認沒有錯誤后,我們再新建一個控制臺項目:CookBookDemo,在項目中添加對Nhibernate.dll, NHibernate.ByteCode.Castle.dll,Eg.Core.dll的引用。

 7.在CookBookDemo項目中添加配置文件:app.cofig

       
        NHibernate.ByteCode.Castle.ProxyFactoryFactory,
        NHibernate.ByteCode.Castle
 
        NHibernate.Dialect.MsSql2008Dialect,
        NHibernate
 
        db
 
        100
   

8 在program.cs中添加如下代碼:

using System;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;

namespace CookBookDemo
{
class Program
    {
static void Main(string[] args)
        {
var nhConfig = new Configuration().Configure();
var schemaExport = new SchemaExport(nhConfig);
            schemaExport.Create(false, true);
            Console.WriteLine("NHibernate Configured!");
            Console.ReadKey();
        }
    }
}

 9 將CookbookDemo設置為啟動項目然后調(diào)試,控制臺上輸出:NHibernate Configured后再打開你的數(shù)據(jù)庫,就可以看到生成的Product表了。

 二、創(chuàng)建一個層次結(jié)構(gòu)的映射。

比如,我們有兩個具體的產(chǎn)品:Movie與Book,它們繼承Product

我們先來看看存儲在同一張表,即Product中:

 1.在項目Eg.Core中新增兩個類:Movie與Book

public class Movie : Product
{
public virtual string Director { get; set; }
}
public class Book : Product
{
public virtual string ISBN { get; set; }
public virtual string Author { get; set; }
}

 2.因為是存在同一張表中,所以為了區(qū)別Movie與Book,在Product中增加一個字段用于將它們區(qū)分開來,所以,我們要修改Product.hbm.xml

                  

 discriminator 節(jié)點中的值就是區(qū)分字段,默認情況下它的值就是類的名稱,所以在本例中,它的值可能為:Eg.Core.Product, Eg.Core.Book, 與 Eg.Core.Movie。當然你也可以手動的通過在類或子類節(jié)點中增加discriminator-value屬性來設置該類的鑒別值。如:

  

3.在項目中增加Movie.hbm.xml與Book.hbm.xml,注意要將生成操作改成:嵌入的資源。

  
    

 4.編譯并執(zhí)行項目:CookbookDemo,執(zhí)行成功后,打開數(shù)據(jù)庫,我們可以看到新生成的Product表結(jié)構(gòu)如下:

 我們也可以將每個類存儲在獨立的表中,這也分兩種情況:子類與父類之間有外鍵約束與沒有外鍵約束

有外鍵約束的情況

 1.Product.hbm.xml中去掉節(jié)點:discriminator,因為是存儲在獨立的表中,所以就不需要這個了。

 2.修改Movie.hbm.xml為:

      

 3.修改Book.hbm.xml為:

      

 4.編譯并執(zhí)行項目:CookbookDemo,執(zhí)行成功后,打開數(shù)據(jù)庫,會看到有三張表:Book,Movie與Product,且三張表的關(guān)系如下圖:

我們可以測試,如果嘗試在Movie或Book表中插入Product表中不存在的ID是會報錯的:

 沒有外鍵約束時,三張表都真的是獨立存儲,個人感覺這時候Product表就沒什么作用了。

 1.修改上面的Movie.hbm.xml為:

  

2.修改上面的Book.hbm.xml為:

    

 3.編譯并執(zhí)行項目:CookbookDemo.打開數(shù)據(jù)庫,表之間的關(guān)系圖如一下:

三 一對多映射

很多數(shù)據(jù)都會出現(xiàn)一對多的情況,我們增加一個類ActorRole,它與Movie之間的關(guān)系是一對多的。

   public class ActorRole : Entity 
    {
        public virtual string Actor { get; set; }
        public virtual string Role { get; set; }
    }

再增加該類的XML文件:

         

修改Movie類:

 public class Movie : Product 
    {
public virtual string Director { get; set; }
public virtual IList Actors { get; set; }
    }

修改Movie.hbm.xml文件:

         

 all-delete-orphan表明,刪除一個Movie時,與該Movie相關(guān)聯(lián)的ActorRole也會被刪除。


文章名稱:Nhibernate3.0Cookbook學習筆記利用XML映射類-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/cooegp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部