C# EF+LINQ保存主从表数据


C# EF+LINQ保存主从表数据

C# 全选
        /// <summary>
        /// 保存主从表数据
        /// </summary>
        public SaveResult Update(BusinessData<tb_BOM, tb_BOMList> data)
        {
            //检查BOM产品重复定义
            if (data.Master.BOMID.IsEmpty() || data.Master.BOMID == "*自动生成*")
            {
                var exists = _Database.GetQueryable<tb_BOM>().Any(a => a.OwnerProductCode == data.Master.OwnerProductCode);
                if (exists) throw new CustomException("BOM产品重复定义!");
            }

            try
            {
                _Database.BeginTransaction();

                SetCommonValue<tb_BOM>(new List<tb_BOM> { data.Master });
                SetCommonValue<tb_BOMList>(data.Details);

                //判断单据号码是否已存在,即可识别当前操作是新增或修改状态
                var m = _Database.GetQueryable<tb_BOM>();
                var isEdit = m.Any(a => a.BOMID == data.Master.BOMID);//修改状态
                var isAdd = isEdit == false;//新增状态

                if (isAdd)
                {
                    #region 新增状态

                    //获取单据号码
                    data.Master.BOMID = DocNoHelper.GetDocNo(_Database, "BO", _Loginer.Account);

                    //设置明细表外键
                    foreach (var d in data.Details)
                    {
                        d.BOMID = data.Master.BOMID;
                    }

                    _Database.Add<tb_BOM>(data.Master);
                    _Database.Add<tb_BOMList>(data.Details);

                    #endregion
                }
                else
                {
                    #region 修改状态

                    //保存主表
                    _Database.Update<tb_BOM>(data.Master);

                    //保存明细:先删除明细,再新增
                    _Database.Remove<tb_BOMList>(w => w.BOMID == data.Master.BOMID);
                    _Database.Add(data.Details);

                    #endregion
                }

                _Database.CommitTransaction();

                _Log.Log(DataLogType.save, "BOM保存", nameof(tb_BOM), "", _Loginer.Account, data);

                var result = new SaveResult
                {
                    DocNo = data.Master.BOMID,//单据号码
                    Result = (int)ResultID.SUCCESS,//成功状态
                    Description = "保存成功",
                };

                return result;
            }
            catch (Exception ex)
            {
                _Database.RollbackTransaction();

                //数据操作日志
                _Log.Log(DataLogType.exception, "BOM保存失败!" + ex.GetMessage(), nameof(tb_BOM), "", _Loginer.Account, data);

                throw;
            }
        }
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:C# LINQ List<T>.ForEach迭代器扩展方法
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

C# EF+LINQ保存主从数据
C# LINQ 使用事务删除主从数据
CSFrameworkV6旗舰版源码展示(C#,LINQ+EF)
使用[后台数据更新模型]保存主从数据(C#源码)
DAL - 主从业务单据数据访问层C#代码
C#EF保存数据DbUpdateException异常:将截断字符串或二进制数据
LINQ 删除多数据、检查数据引用
C# LINQ 生成List<T>交叉数据
C/S系统开发框架多级明细表(三级/主从)数据结构参考
C/S开发框架教程:使用基础资料(数据字典)的DAL层更新主从(或多数据
BLL - 主从业务单据业务逻辑层C#代码
C/S系统快速开发框架数据操作窗体(单主从窗体)按钮事件
GridControl表格实现主从展示数据(Master/Detail)
CSFrameworkV6-业务单据数据查询页面显示主从关联数据解决方案
代码生成器 CodeGenerator - 生成业务窗体 (主从数据管理界面)
C/S Winform开发框架 - 单基础资料窗体实现主从资料管理
DevExpress XtraReport 开发指南 - 主从报表设计(C#)
CSFramework.EF数据库框架简介
使用bllBaseDataDict类提交业务单据(主从)的明细表实例|C/S框架网
支持主从BLL单独提交明细表优化UpdateDetailKey方法|C/S框架网