標籤:
導航
目 錄:Farseer.net輕量級ORM開源架構 目錄
上一篇:Farseer.net輕量級ORM開源架構 V1.x 入門篇:資料庫設定檔
下一篇:Farseer.net輕量級ORM開源架構 V1.x 入門篇:表實體類映射
前言
上文講述了資料庫配置使用,搭建好資料庫的連結方式了我們知道怎麼做了。
事實上,至今我們仍然還沒有講到代碼方面,花了前面這麼多篇幅講解,主要是想由淺入深,不然一上來給大家講解這講解那的,聽的也一頭霧水,反而得不到效果。
這篇比較重要,因為它是我們在使用Farseer.Net時最基礎的類:DbContext(與EntityFramework的DbContext一個概念)
資料庫上下文
從字面上,我們就知道:它是我們程式(業務)與資料庫之間的溝通橋樑,在對錶(實體類)進行CURD時,需要讓實體類知道,我需要訪問哪種資料庫。
而資料庫上下文,就是告訴我們的實體類,應該對哪個資料庫類型進行串連訪問。
在Farsser.Net裡,資料庫上下文對應的類便是:DbContext,這便是需要我們繼承它,然後在這個類裡面,封裝我們需要的實體類的屬性。
建構函式
/// <summary> /// 通過資料庫配置,串連資料庫 /// </summary> /// <param name="dbIndex">資料庫選項</param> protected DbContext(int dbIndex = 0) /// <summary> /// 通過自訂資料連結符,串連資料庫 /// </summary> /// <param name="connectionString">資料庫連接字串</param> /// <param name="dbType">資料庫類型</param> /// <param name="commandTimeout">SQL執行逾時時間</param> protected DbContext(string connectionString, DataBaseType dbType = DataBaseType.SqlServer, int commandTimeout = 30)
帶int dbIndex形參的建構函式,傳入的便是DbConfig的配置索引項目(假如我們配置了多個資料庫的話)。
形參int dbIndex = 0 的預設設定,我們不需要額外的代碼來設定它,除非你需要不同的資料庫的配置。或者根據自己的業務需要通過自訂構造來達到運行時不同的資料庫訪問。
最後一個建構函式,是在我們不使用DbConfig資料庫配置項的情況下,指定串連方式。
上面我們沒有用到Web.Config(或者App.Config)配置項,事實上博主很不喜歡在Web.Config中進行設定自訂的配置項,感覺這會有“侵略”的感覺。
DbContext的衍生類別
DbContext<TPo>,事實上這個類僅是多了一個屬性:
/// <summary> /// 靜態執行個體 /// </summary> public static TPo Data { get { return new TPo { IsMergeCommand = false }; } }
它僅僅是讓我們不需要執行個體化using(var db = new DbContext())來調用。
很多時候,我們僅僅是一個很簡單的操作。比如僅一條資料的插入:
// 插入資料Table.Data.User.Insert(new UserVO() { UserName = "yy" });
而不需要:
using (var context = new Table()){ info = new UserVO() { UserName = "xx" }; // 插入資料 context.User.Insert(info, true); context.SaveChanges();}實際項目的上下文
它繼承自DbContext<TPo>的:
1 /// <summary> 2 /// 資料庫上下文 3 /// </summary> 4 public class Table : DbContext<Table> 5 { 6 /// <summary> 7 /// 預設為0時,可不顯示填寫這一項,當前只是為了示範 8 /// </summary> 9 public Table() : base(0) { }10 11 [Set(Name = "Members_User")]12 public TableSet<UserVO> User { get; set; }13 14 [Set(Name = "Members_Role")]15 public TableSetCache<UserRoleVO> UserRole { get; set; }16 [Set(Name = "Members_Orders")]17 public TableSet<OrdersVO> Orders { get; set; }18 19 [Set(Name = "Members_Orders")]20 [SortDelete(Name = "IsDeleteByAt", FieldType = eumSortDeleteType.DateTime, Value = true)]21 public TableSet<OrdersVO> OrdersAt { get; set; }22 23 [Set(Name = "Members_Orders")]24 [SortDelete(Name = "IsDeleteByBool", FieldType = eumSortDeleteType.Bool, Value = true)]25 public TableSet<OrdersVO> OrdersBool { get; set; }26 27 [Set(Name = "Members_Orders")]28 [SortDelete(Name = "IsDeleteByNum", FieldType = eumSortDeleteType.Number, Value = 3)]29 public TableSet<OrdersVO> OrdersNum { get; set; }30 }
TableSet相當於EntityFramework的Set類,這在下一篇中才講述。
DbContext的屬性
/// <summary> /// 資料庫提供者(不同資料庫的特性) /// </summary> public AbsDbProvider DbProvider { get; private set; } /// <summary> /// 資料庫操作 /// </summary> public DbExecutor DataBase { get; private set; } /// <summary> /// 執行資料庫操作 /// </summary> public ExecuteSql Executeor { get; private set; } /// <summary> /// 映射關係 /// </summary> public ContextMap Map { get; private set; }
DbProvider:資料庫提供者,不同的資料庫類型都要有對應的實作類別,比如有:SqlServerProvider。裡面實現不同資料庫的一些特性。
DataBase:是產生SQL之後最終提交到這裡進行資料庫互動。
Executeor:通過DataBase執行後返回的object/datatable類型進行泛型轉換。它與DataBase的區別是它更區向業務上的資料類型。
Map:是指資料庫內容相關的映射資訊,包括一些Property的資訊。
DbContext的方法
/// <summary>/// 儲存修改/// IsMergeCommand=true時:只提交一次SQL到資料庫/// </summary>/// <param name="isOlation">預設啟用事務操作</param>public int SaveChanges(bool isOlation = true)
根據方法命名,我們就可以聯想到它是針對資料進行變更時進行的儲存提交。
注意的是:對資料庫的查詢是不需要調用這個方法的,僅在對資料進行更新、刪除、插入時,才需要調用。
但是,如果你是使用靜態方式,即不需要new DbContext()方式時,也不需要調用SaveChanges的。這是提供的一種便利(文法糖)。
其帶了個參數bool isOlation = true,為true時,會預設以事務的方式提交。如果您不希望這樣,可以顯示傳入false。
總結
這一篇,大家學會了資料庫內容相關的代碼編寫了,雖然篇幅很長,但其實就是那麼一回事,簡單的不能再簡單了。
導航
目 錄:Farseer.net輕量級ORM開源架構 目錄
上一篇:Farseer.net輕量級ORM開源架構 V1.x 入門篇:資料庫設定檔
下一篇:Farseer.net輕量級ORM開源架構 V1.x 入門篇:表實體類映射
廣告時間
QQ群:116228666 (Farseer.net開源架構交流) 請註明:Farseer.Net
Farseer.Net是一款ORM架構 + 常用工具 + 擴充集合。
Farseer 寓意:Crowdsourced Security Testing、預言家 通常在某些場合時,提供計謀、策略。也希望該架構能給大家提供最大化的便捷。
ORM:其英文全稱是:Object(對象) Relational(關係) Mapping(映射)
Farseer.Net的目標是:快速上手、快速開發、簡單方便。
1 Table.Data.User.Where(o=>o.ID == 1).ToEntity();2 Table.Data.User.Where(o=>o.ID > 1).ToList();3 Table.Data.User.Where(o=>o.ID != 0).Delete();4 Table.Data.User.Where(o=>o.ID != 0).AddUp(o=>o.LoginCount, 1);5 Table.Data.User.Where(o=>o.ID == 1).Update(new User{ UserName = "newName" });6 Table.Data.User.Insert(new User{ UserName = "newName" });
Farseer.net輕量級ORM開源架構 V1.x 入門篇:資料庫上下文