在V1.0中,新增了存儲過程的映射。在以往的版本中,操作存儲過程的代碼沒有這么優雅,必須在每次操作的時候傳入存儲過程名稱、in參數、out參數。
在這個版本之后,存儲過程也享受了映射帶來的好處:
- 支持定義實體
- 實體中定義in參數、out參數
- 更易於維護(維護僅是針對實體結構)
這是這個版本的一個小創新點。以往我們調用存儲過程時,只能在邏輯段里手動寫參數名稱、存儲過程名稱。
這給我們帶來了維護災難,同時最重要的是不支持硬編碼方式也是很不優雅的。在新版中實現了這一支持。
public class Proc : DbContext<Proc> { [Set(Name = "sp_Info_User")] public ProcSet<InfoUserVO> InfoUser { get; set; } [Set(Name = "sp_Insert_User")] public ProcSet<InsertUserVO> InsertUser { get; set; } [Set(Name = "sp_List_User")] public ProcSet<ListUserVO> ListUser { get; set; } [Set(Name = "sp_Value_User")] public ProcSet<ValueUserVO> ValueUser { get; set; } }
它的各個存儲過程由ProcSet封裝。針對數據庫表提供的一系列執行的操作。被ProcSet包含的就是存儲過程字段了。這里有點特殊的是,除了是查詢的結果集的映射外,包含了參數傳入的映射,並且區分in/out。
存儲過程實體類:
1 public class InsertUserVO 2 { 3 /// <summary> 用戶ID </summary> 4 [Field(IsOutParam = true)] 5 public int? ID { get; set; } 6 /// <summary> 用戶名 </summary> 7 [Field(IsInParam = true)] 8 public string UserName { get; set; } 9 /// <summary> 密碼 </summary> 10 [Field(IsInParam = true)] 11 public string PassWord { get; set; } 12 }
存儲過程與表、視圖的區別比較大。在上面代碼中,看到使用了IsOutParam和IsInParam的特性。標記后,在執行存儲過程時,會根據這些標記生成SQL參數化。傳入到存儲過程中。
與此同時,如果該條存儲過程執行后,會返回數據列表時,也會對應的返回當前這個實體列表。就根據我們對表進行查詢時一樣。
通過存儲過程的映射,我們不需要每次調用時手動指定他們了。讓我們存儲過程也能ORM了。
只有一個:FieldAttribute,它與表的特性是共同的。只不過它多了一些針對存儲過程而設計的:
我們先來看下面的表格:
序號 | 變量 | 注釋 | 類型 | 適用范圍 | 說明 |
1 | Name | 數據庫字段名稱 | string | 全部 | 指定表字段、視圖字段名稱、存儲過程參數的名稱、數據庫函數 未顯示指定時,默認使用當前的類屬性名稱作為缺省名稱 |
2 | IsOutParam | 指示字段是否為存儲過程中輸出的參數 | bool | 存儲過程 | 默認:false 設為:true 將作為SQL參數值傳入,並配合Name聲明參數名稱,與InParam區別是Out在數據庫存儲過程中也要聲明為該變量是out 即在存儲過程中改變時,會將值返回來 |
3 | IsInParam | 指示字段是否為存儲過程中輸入的參數 | bool | 存儲過程 | 默認:false 設為:true 將作為SQL參數值傳入,並配合Name聲明參數名稱 |
只是多了第2、3條屬性說明(與TableSet、ViewSet的特性:FieldAttribute,是同一個)。
通過設置它們,很容易讓Farseer.Net哪些是參數及輸入輸出。
存儲過程的映射非常簡單,當然它的操作也是非常簡單,在下一篇我們可以學習到它提供的4種方法用來操作。
這篇就結束在這,總結,其實沒什么好總結的了。
QQ群:116228666 (Farseer.net開源框架交流) 請注明:Farseer.Net
Farseer.Net是一款ORM框架 + 常用工具 + 擴展集合。
Farseer 寓意:先知、預言家 通常在某些場合時,提供計謀、策略。也希望該框架能給大家提供最大化的便捷。
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" });