日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

NHibernate初学者指南(6):映射模型到数据库之方式二

發布時間:2023/11/29 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NHibernate初学者指南(6):映射模型到数据库之方式二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Fluent NHibernate自動映射

使用Fluent NHibernate自動映射,首先要將映射的實體放到一個命名空間中,這使得通知AutoMapper哪些實體和值對象包含在映射中更容易。建議在你的項目中創建一個Domain文件夾,將需要映射的實體和值對象放到這個文件夾中。

因為隱式映射實體和值對象,需要為AutoMapping定義約定和例外。我們通過實現一個繼承自DefaultAutomappingConfiguration的配置類實現。

假設我們已經將所有的實體和值對象放在了相同的命名空間中,這個命名空間只包含domain類,我們就可以如下面的代碼定義配置類:

public class OrderingSystemConfiguration : DefaultAutomappingConfiguration {public override bool ShouldMap(Type type){return type.Namespace == typeof(Customer).Namespace;} }

上面的代碼告訴AutoMapping只映射那些和Customer實體有相同命名空間的類。

在AutoMapper工作之前,我們還需要告訴它更多的事情。我們必須告訴它在系統中誰是值對象。這可以在配置類中重寫IsComponent方法實現,如下面代碼所示:

public override bool IsComponent(Type type) {var componentTypes = new[] { typeof(Name), typeof(Address) };return componentTypes.Contains(type); }

配置系統使用自動映射,我們利用下面的代碼:

var cfg = new OrderingSystemConfiguration(); var configuration = Fluently.Configure().Database(/* database config */).Mappings(m =>m.AutoMappings.Add(AutoMap.AssemblyOf<Employee>(cfg))).BuildConfiguration();

?

實戰時間–使用自動映射

在這個例子中,我們想定義一個基本的領域模型,使用Fluent NHibernate提供的自動映射來映射我們的模型,然后讓NHibernate根據映射為我們生成數據庫架構:

1. 在VS中創建一個Console Application,名字為:AutoMappingSample。

2. 添加NHibernate.dll和FluentNHibernate兩個程序集到項目中。

3. 在項目中新建一個Domain文件夾。

4. 分別添加以下類到Domain文件夾中:

Customer類

namespace AutoMappingSample.Domain {public class Customer{public virtual int Id { get; set; }public virtual string CustomerName { get; set; }} }

LineItem類

namespace AutoMappingSample.Domain {public class LineItem{public virtual int Id { get; set; }public virtual int Quantity { get; set; }public virtual decimal UnitPrice { get; set; }public virtual string ProductCode { get; set; }} }

Order類

namespace AutoMappingSample.Domain {public class Order{public virtual int Id { get; set; }public virtual DateTime OrderDate { get; set; }public virtual Customer Customer { get; set; }public virtual IList<LineItem> LineItems { get; set; }} }

5. 在項目中添加一個OrderingSystemConfiguration類,繼承自DefaultAutomappingConfiguration。

6. 重寫ShouldMap方法,如下面的代碼:

namespace AutoMappingSample {public class OrderingSystemConfiguration : DefaultAutomappingConfiguration{public override bool ShouldMap(Type type){return type.Namespace == typeof(Customer).Namespace;}} }

7. 在Program類中添加如下using語句:

using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using FluentNHibernate.Automapping; using AutoMappingSample.Domain; using NHibernate.Tool.hbm2ddl;

8. 添加下面的代碼到Program類的Main方法創建NHibernate配置。配置對象使用Fluent NHibernate的配置API創建用于自動映射。

var cfg = new OrderingSystemConfiguration(); var configuration = Fluently.Configure().Database(MsSqlConfiguration.MsSql2008).Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<Customer>(cfg))).BuildConfiguration();

注意為這個操作定義數據庫字符串沒有必要,因為我們不訪問數據庫,只是告訴NHibernate哪種類型的數據庫。

9. 添加下面的代碼創建并在控制臺上顯示SQL腳本:

var exporter = new SchemaExport(configuration); exporter.Execute(true, false, false);

10. 添加下面的代碼避免程序不經確認就退出:

Console.WriteLine("按回車退出:"); Console.ReadLine();

11. 運行程序,控制臺輸出如下:

使用ConfORM自動映射

ConfORM是NHibernate contributions的一部分,可從http://code.google.com/p/codeconform/downloads/list下載。確保下載的版本兼容你使用的NHibernate版本。

和Fluent NHibernate的AutoMapper一樣,ConfORM使用約定隱式定義領域模型的映射。這些約定可以重寫,也可以定義我們自己的約定。

實戰時間–使用ConfORM映射模型

在這個例子中,我們再一次創建一個簡單的領域模型并使用ConfORM為我們創建一個隱式的映射。然后我們使用NHiernate的schema exporter創建SQL腳本來創建兼容我們模型的數據庫架構。

1. 打開VS,創建一個Console Application項目,名字為:ConfORMSample。

2. 添加對NHibernate.dll和ConfORM.dll程序集的引用到項目中。我使用的NHibernate版本是3.1的,所以ConfORM也是兼容3.1的ConfORM 1.0.1.5。

3. 在項目中創建一個Domain文件夾。

4. 添加上一個例子中的Customer,Order和LineItem類到Domain文件夾。

Customer類

namespace ConfORMSample.Domain {public class Customer{public virtual int Id { get; set; }public virtual string CustomerName { get; set; }} }

Order類

namespace ConfORMSample.Domain {public class Order{public virtual int Id { get; set; }public virtual DateTime OrderDate { get; set; }public virtual Customer Customer { get; set; }public virtual IList<LineItem> LineItems { get; set; }} }

LineItem類

namespace ConfORMSample.Domain {public class LineItem{public virtual int Id { get; set; }public virtual int Quantity { get; set; }public virtual decimal UnitPrice { get; set; }public virtual string ProductCode { get; set; }} }

5. 在Program類中添加如下using語句:

using ConfORMSample.Domain; using ConfOrm; using ConfOrm.NH; using NHibernate.Cfg; using NHibernate.Cfg.Loquacious; using NHibernate.Dialect; using NHibernate.Driver; using NHibernate.Tool.hbm2ddl;

6. 在Program類的Main方法中,使用NHibernate提供的fluent配置API創建一個NHibernate配置對象:

var configuration = new Configuration(); configuration.DataBaseIntegration(db => {db.Dialect<MsSql2008Dialect>();db.Driver<SqlClientDriver>(); });

7. 添加如下代碼,確定要映射的類型:

var types = typeof(Customer).Assembly.GetTypes().Where(t => t.Namespace == typeof(Customer).Namespace);

8. 創建一個類型為ObjectRelationalMapper的實例,如下面的代碼所示:

var orm = new ObjectRelationalMapper();

9. 告訴映射器,應該為每一個類型創建一個表,如下所示:

orm.TablePerClass(types);

10. 創建映射,并將它們添加到配置對象,如下面的代碼所示:

var mapper = new Mapper(orm); var hbmMappings = mapper.CompileMappingFor(types); configuration.AddDeserializedMapping(hbmMappings, "MyDomain");

11. 創建schema生成腳本,如下面的代碼所示:

var exporter = new SchemaExport(configuration); exporter.Execute(true, false, false);

12. 同樣,添加下面的代碼為避免程序未經確認就退出:

Console.Write("按回車退出:"); Console.ReadLine();

13. 運行程序,如下圖所示:

沒用編碼和少量的配置,我們就使系統為我們的領域模型創建了一個隱式的映射,并導出為可以創建數據庫架構的腳本。生成的腳本基于定義在ConfORM中的約定。所有的這些約定都可以重寫,也可以根據需要添加自己的約定。

自動映射到此為止,下一篇介紹XML映射。

總結

以上是生活随笔為你收集整理的NHibernate初学者指南(6):映射模型到数据库之方式二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。