C#.NET 大型通用信息化系統集成快速開發平台 4.1 版本 - 主細表事務處理的標准例子


要么就一次全成功,要么就一次全失敗,插入主表的同時插入關聯的子表,主表插入時返回當前插入的主鍵,字表插入時用這個主鍵做關聯。

參考代碼如下:

        /// <summary>
        /// 添加角色(同時添加用戶,一個數據庫事務里進行處理)
        /// </summary>
        /// <param name="userInfo">用戶</param>
        /// <param name="entity">實體</param>
        /// <param name="userIds">用戶主鍵數組</param>
        /// <param name="statusCode">返回狀態碼</param>
        /// <param name="statusMessage">返回狀態信息</param>
        /// <returns>主鍵</returns>
        public string AddWithUser(BaseUserInfo userInfo, BaseRoleEntity entity, string[] userIds, out string statusCode, out string statusMessage)
        {
            var parameter = ServiceParameter.CreateWithMessage(userInfo
                , MethodBase.GetCurrentMethod()
                , this.serviceName
                , AppMessage.RoleService_Add);

            string result = string.Empty;
            string returnCode = string.Empty;
            string returnMessage = string.Empty;
            ServiceUtil.ProcessUserCenterWriteDbWithTransaction(userInfo, parameter, (dbHelper) =>
            {
                // 這里是判斷已經登錄的用戶是否有調用當前函數的權限,加強服務層被遠程調用的安全性的
                var permissionManager = new BasePermissionManager(userInfo);
                if (permissionManager.CheckPermissionByUser(userInfo.Id, "RoleAdmin.Add", "添加角色"))
                {
                    string tableName = userInfo.SystemCode + "Role";
                    var manager = new BaseRoleManager(dbHelper, userInfo, tableName);
                    result = manager.Add(entity, out returnCode);
                    if (!string.IsNullOrEmpty(result) && userIds != null && userIds.Length > 0)
                    {
                        tableName = userInfo.SystemCode + "UserRole";
                        var userManager = new BaseUserManager(dbHelper, userInfo, tableName);
                        // 小心異常,檢查一下參數的有效性
                        if (userIds != null)
                        {
                            userManager.AddToRole(userIds, result);
                        }
                    }
                    returnMessage = manager.GetStateMessage(returnCode);
                }
            });
            statusCode = returnCode;
            statusMessage = returnMessage;
            return result;
        }

 

 


免責聲明!

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



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