[LINQ2Dapper]最完整Dapper To Linq框架(七)---倉儲模式


目錄

 

3.1.8版本增加新功能倉儲模式

Kogel.Repository 作為擴展,現實了通用倉儲層功能。與其他規范標准一樣,倉儲層也有相應的規范定義

1.安裝

使用倉儲模式需要安裝擴展包Kogel.Repository,可在Nuget上搜索最新版本

或者使用Nuget命令

dotnet add package Kogel.Repository

 

2.定義

public class TestRepository : BaseRepository<Comment>//Comment為實體類
    {
        public override void OnConfiguring(RepositoryOptionsBuilder builder)
        {
            builder
                .BuildConnection(new MySqlConnection("Server=localhost;Database=Qx_Sport_Common;Uid=root;Pwd=A5101264a;"))//配置連接方式
                .BuildProvider(new MySqlProvider());//配置數據庫提供者

        }
    }

用此方法可以根據自身需求配置多數據庫 

 

3.使用方法

1.支持原生Kogel.Dapper.Extension的方法

using (TestRepository testRepository = new TestRepository())
      {
                var querySet = testRepository.QuerySet();//查詢對象
                var commandSet = testRepository.CommandSet();//執行對象
     }

或者使用事務中的Orm屬性

using (TestRepository testRepository = new TestRepository())
            {
                var comment = testRepository.Orm.QuerySet<Comment>().ToList();
            }

此Orm屬性相當於倉儲創建時產生的IDbConnection

還支持基礎的增刪改查

/// <summary>
		/// 根據主鍵獲取當前實體數據
		/// </summary>
		/// <returns></returns>
		T FindById(int id);
		/// <summary>
		/// 增加
		/// </summary>
		/// <returns></returns>
		int Insert(T entity);
		/// <summary>
		/// 刪除(根據主鍵)
		/// </summary>
		/// <returns></returns>
		int Delete(int id);
		/// <summary>
		/// 修改(根據主鍵)
		/// </summary>
		/// <returns></returns>
		int Update(T entity);

  

 

2.UnitOfWork

UnitOfWork 可將多個數據庫操作放在一個單元管理執行,最終通用 Commit 執行所有操作,內部采用了數據庫事務;

例如

using (TestRepository testRepository = new TestRepository())
            {
                //開始事務
                testRepository.UnitOfWork.BeginTransaction(() =>
                {
                    var comment = testRepository.Orm.QuerySet<Comment>().ToList();

                    testRepository.Orm.CommandSet<Comment>()
                        .Where(x => x.Id == comment.FirstOrDefault().Id)
                        .Update(comment.FirstOrDefault());
                    //其他倉儲類代碼塊
                    new TestRepositoryQuery1().Test();
                });
                //提交
                testRepository.UnitOfWork.Commit();
            }

       其他倉儲類的代碼塊也會進入此單元管理的事務中,因為他們都將會用指定方(testRepository)開啟的IDbConnectionIDbTransaction並且如果事務

中的代碼塊異常,會第一時間回滾並且拋出異常

       如果工作單元事務中存在其他數據庫連接方式(根據連接字符串判斷)的查詢編輯語句,則會使用自身的連接和事務不會用指定方(testRepository)開啟

IDbConnectionIDbTransaction

 

 

框架開源,完整框架源碼可以去Github上下載:

https://github.com/a935368322/Kogel.Dapper.Extension

如有問題也可以加QQ群討論:

技術群 710217654


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM