LINQ 删除多表数据、检查数据引用


LINQ 删除多表数据、检查数据引用-开发框架文库

LINQ 删除多表数据、检查数据引用

LINQ 删除多表数据、检查数据引用

 

C# 全选
        /// <summary>
        /// 删除客户资料
        /// </summary>
        /// <param name="keyValue">主键isid</param>
        /// <returns></returns>
        public override bool Delete(string keyValue)
        {
            var obj = _Database.GetQueryable<dt_Customer>().Where(w => w.isid == keyValue).FirstOrDefault();
            if (obj != null)
            {
                //检查数据引用
                if (this.IsReference(obj.CustomerCode))
                {
                    throw new BizException("当前记录不可删除,资料已使用!");
                }
            }

            //启用事务删除多表数据
            try
            {
                _Database.BeginTransaction();

                var master = _Database.GetQueryable<dt_Customer>().Where(w => w.isid == keyValue).FirstOrDefault();
                var detailA = _Database.GetQueryable<dt_Address>().Where(w => w.OwnerCode == master.CustomerCode).ToList();
                var detailB = _Database.GetQueryable<dt_CustomerPriceList>().Where(w => w.CustomerCode == master.CustomerCode).ToList();
                var detailC = _Database.GetQueryable<dt_CustomerDiscount>().Where(w => w.CustomerCode == master.CustomerCode).ToList();
                var detailD = _Database.GetQueryable<tb_AttachFile>().Where(w => w.DocType == "Customer" && w.DocID == master.CustomerCode).ToList();
                var detailE = _Database.GetQueryable<dt_CustomerCartons>().Where(w => w.CustomerCode == master.CustomerCode).ToList();

                int count = 0;

                count += _Database.Remove<dt_Customer>(master);
                count += _Database.Remove<dt_Address>(detailA);
                count += _Database.Remove<dt_CustomerPriceList>(detailB);
                count += _Database.Remove<dt_CustomerDiscount>(detailC);
                count += _Database.Remove<tb_AttachFile>(detailD);
                count += _Database.Remove<dt_CustomerCartons>(detailE);

                _Database.CommitTransaction();

                //保存被删除的数据
                if (count > 0)
                    _Log.Log(DataLogType.delete, "Customer删除成功:", nameof(dt_Customer), master.CustomerCode, _Loginer.Account, master, master, detailA, detailB, detailC, detailD, detailE);

                return count > 0;
            }
            catch (Exception e)
            {
                _Database.RollbackTransaction();
                throw;
            }
        }

 

检查数据引用

 

C# 全选
/// <summary>
/// 检查数据引用
/// </summary>
/// <param name="customerCode"></param>
/// <returns></returns>
private bool IsReference(string customerCode)
{
    if (_Database.GetQueryable<tb_SO>().Any(a => a.CustomerCode == customerCode)) return true;//销售单
    if (_Database.GetQueryable<tb_DO>().Any(a => a.CustomerCode == customerCode)) return true;//送货单
    if (_Database.GetQueryable<tb_QO>().Any(a => a.CustomerCode == customerCode)) return true;//报价单
    return false;
}

 

删除客户资料截图

LINQ 删除多表数据、检查数据引用

 

 

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:C# LINQ关联两个List更新数据
下一篇:LINQ 左联查询 Left Join
评论列表

发表评论

评论内容
昵称:
关联文章

LINQ 删除数据检查数据引用
C# LINQ 使用事务删除主从数据
开发技巧:删除资料保存日志并检查数据是否能删除
LINQ 返回数据、组合数据
C# EF+LINQ保存主从数据
删除用户前逻辑判断,检查当前用户是否关联业务数据或创建业务数据
SQL存储过程:删除基础资料前逻辑判断,检查是否有关联业务数据
C# LINQ 生成List<T>交叉数据
CSFrameworkV6旗舰版源码展示(C#,LINQ+EF)
DAL - 保存的资料
开发示例:数据字典窗体提供数据更新
开发技巧:您不能删除别人的数据
C/S开发框架教程:使用基础资料(数据字典)的DAL层更新主从(或数据
保存报错:当前记录已被其它用户删除,刷新数据失败
DAL - 单数据字典数据访问层C#代码
C# LINQ使用Distinct方法检查对象某个属性的值是否重复
表格内显示关联数据解决方案(Join,View,Lookup)
C/S开发框架的数据访问层用LINQ吗?
CSFramework.CodeGeneratorV6.0-配置主检查字段
FAQ:点明细表删除按钮删除一条数据,保存后发现其他记录也被删除了!