.net core 大型事務的處理辦法

前言:此隨筆僅供自己學習,如有不足還請指出

在很多業務邏輯場景的時候,需要很多步驟同時進行成功,而且都不能出差錯,而現在我就遇到了這樣的問題,代碼如下

public class BufferCacheRepository : BaseRepository
    {
    //依賴注入上下文
    private readonly WriteDbContext _writeDbContext;
    public BufferCacheRepository(WriteDbContext writeDbContext){
          _writeDbContext = writeDbContext;
    }
    public async Task<bool> Execute(string jobKey)
        {
            //新建一個事務
            IDbContextTransaction transaction = null;
            try
            {
                //根據業務不同可以省略或拓展
                if (ture)
                {
                    //開啓事務,使用到此上下文的業務都可以包含到事務中
                    transaction = await _writeDbContext.Database.BeginTransactionAsync();
                    //這裏放你的業務邏輯代碼
                    //
                    //例子:
                    //下面代碼用到同一個上下文都會包含到事務中並且同時成功或同時失敗,可以根據需求進行封裝
                    await _writeDbContext.Database.ExecuteSqlCommandAsync("delete from tabulardata");
                    await _writeDbContext.TabularData.AddRangeAsync(tabularDatas);
                   await _writeDbContext.SaveChangesAsync();
                    //提交事務
                    transaction.Commit();
                }
                else
                {

                }
                return true;
            }
            catch (Exception ex)
            {
                //如果事務不存在或者爲控則回滾
                transaction?.Rollback();
            }
            finally
            {
                //不管怎樣最後都會關閉掉這個事務
                using (transaction) { }
            }
            return false;
        }
}                            

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章