(源碼下載)高靈活度,高適用性,高性能,輕量級的 ORM 實現

我在上一篇博客中簡單說明了一個面向內存數據集的「ORM」的實現方法,也提到個人設計實現或許不能稱之爲「ORM」,姑且稱之爲 S-ORM吧。html

 

可能有些小夥伴沒有理解個人思路和目的,與傳統ORM框架作了簡單比較,事實上我要作的事情並不是爲數據庫表結構創建實體對象模型,而是但願使用傳統的 ADO.NET 方式來操做數據庫,並對 ADO.NET 所獲得的結果數據集,進行鬆散的動態映射;同時提供一些類ORM的自動化方法,簡化傳統 ADO.NET 對數據庫的操做。數據庫

 

再此再次簡單說明設計目標:app

1.支持全部數據庫原生操做(ADO.NET / 基於微軟企業庫的數據模塊)框架

2.解除與數據庫表模型一對應的關係,由開發人員靈活指定映射關係函數

3.支持直接使用SQL語句並根據查詢結果動態映射。性能

4.支持調用存儲過程並根據查詢結果動態映射。學習

5.支持自動化的事務處理,可自動回滾。ui

6.支持一對多的映射關係,即一個實體類能夠映射到多張表。spa

7.支持自動填充/補全數據實體類中的數據。設計

8.高性能,高靈活性,高可維護性。

 

詳細說明可參考個人上一篇博客:http://www.cnblogs.com/sheng_chao/p/4553832.html

 

在此補充幾個應用場景的小例子:

1. 表 User 中有若干字段(>2),如今只想取出其中 2 個字段創建對象實例並序列化發送至客戶端。

  定義一個包含所需 2 個字段的對象(假設爲 User_A ),經過 S-ORM 提供的 Attribute 指定該對象與數據庫表結構的對應關係,使用 Fill 方法自動填充該對象的屬性。

    [Table("User")] public class User_A { [Key] public Guid Id { get; set; } public string Name { get; set; } public int Age { get; set; } }

填充該對象:

public User_A GetUser_A(Guid id) { User_A user = new User_A(); user.Id = id; if (_dataBase.Fill<User_A>(user)) return user; else
                return null; }

 

2. 但願使用 SQL 語句從數據庫表中查詢數據,將結果實例化爲強類型對象實例。

  在此場景中,結果集可能來自於多張表,或者結果集根本就是某些數據的複雜統計結果。與表結構的設計徹底無關,使用 S-ORM 很是簡單,同上先定義好對象類型,而後使用相似以下方法:

        public List<User_A> GetData(Guid id) { List<CommandParameter> parameterList = new List<CommandParameter>(); parameterList.Add(new CommandParameter("@userId", id)); List<User_A> userList = _dataBase.Select<User_A>( "SELECT * FROM [User] INNER JOIN [Product] ON [User].[Id] = [Product].[UserId] WHERE [User].[Id]= @userId", parameterList); return userList; }

在此能夠看到, S-ORM 所作的事情很是簡單,對 ADO.NET 返回的數據集,與指定的對象類型 User_A ,進行動態映射,獲得 User_A 類型的實例集合。

注意:S-ORM 不強制要求對象類型定義與內存數據集字段一一對應,在上一博客中已有詳細說明,請參考。

 

3. 調用存儲過程,獲得強類型對象集合結果。

  同上例目的基本一致,對於複雜查詢,直接使用數據庫所提供的強大查詢功能:視圖,存儲過程,自定義函數,將獲得的結果集自動化映射爲強類型對象實例。

  先定義咱們想要的對象類型,再也不贅述,而後藉助 S-ORM:

public List<Record> GetReport(Guid id) { List<CommandParameter> parameterList = new List<CommandParameter>(); parameterList.Add(new CommandParameter("@id", id)); DataSet dataSet = _dataBase.ExecuteDataSet( CommandType.StoredProcedure, "GetRecord", parameterList, "Result"); List<Record> reportList = RelationalMappingUnity.Select<Record>(dataSet); return reportList; }

 

上面 3 個示例基本表明了 S-ORM 的設計目的,同時 S-ORM 也提供了許多相關的輔助功能,和與傳統 ORM 相似的增刪改查方法,請參考上一篇博客中的詳細介紹。

 可參考個人上一篇博客:http://www.cnblogs.com/sheng_chao/p/4553832.html

 

 

歡迎加我QQ交流探討,共同窗習:279060597,另外我在南京,有南京的朋友嗎?

相關文章
相關標籤/搜索