Exemplo n.º 1
0
        public static bool TryRecordDetailsAdd <TSrc, TSrcD, TDst, TDstD>(this Pinhua2Context context, TSrc src, IEnumerable <TSrcD> srcDSet,
                                                                          Action <TSrcD> Adding = null)
            where TSrc : _BaseTableMain
            where TSrcD : _BaseTableDetail
            where TDst : _BaseTableMain
            where TDstD : _BaseTableDetail
        {
            if (!srcDSet.Any())
            {
                // 如果明细为空,直接返回 true ,避免主表数据无法保存成功
                return(true);
            }

            foreach (var srcD in srcDSet)
            {
                Adding?.Invoke(srcD);
                srcD.RecordId = src.RecordId;
                var dstD = StaticAutoMapper.Current.Map <TSrcD, TDstD>(srcD);
                context.Entry <TDstD>(dstD).State = EntityState.Added;
            }

            var nRet = context.SaveChanges();

            if (nRet > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        public static bool TryRecordAdd <TSrc, TDst>(this Pinhua2Context context, TSrc src, Action <TSrc> Adding = null)
            where TSrc : _BaseTableMain
            where TDst : _BaseTableMain
        {
            Adding?.Invoke(src);

            src.CreateTime = DateTime.Now;
            src.CreateUser = src.CreateUser ?? "张凯译";
            var dst = StaticAutoMapper.Current.Map <TSrc, TDst>(src);

            context.Entry <TDst>(dst).State = EntityState.Added;

            var nret = context.SaveChanges();

            if (nret > 0)
            {
                // SaveChanges 成功的话,把数据库中的数据比如 RecordId 返回
                // src.RecordId = dst.RecordId;
                StaticAutoMapper.Current.Map <TDst, TSrc>(dst, src);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 3
0
        public static bool TryRecordEdit <TSrc, TDst>(this Pinhua2Context context, TSrc src, /*out TDst outDst,*/ Action <TSrc> Editing = null)
            where TSrc : _BaseTableMain
            where TDst : _BaseTableMain
        {
            var dst = context.Set <TDst>().FirstOrDefault(m => m.RecordId == src.RecordId);

            if (dst == null)
            {
                //outDst = null;
                return(false);
            }

            Editing?.Invoke(src);

            src.CreateTime   = dst.CreateTime;
            src.CreateUser   = dst.CreateUser;
            src.LastEditTime = DateTime.Now;
            src.LastEditUser = src.LastEditUser ?? "张凯译";

            StaticAutoMapper.Current.Map <TSrc, TDst>(src, dst);
            context.Entry <TDst>(dst).State = EntityState.Modified;
            var ret = context.SaveChanges();

            if (ret > 0)
            {
                //outDst = dst;
                return(true);
            }
            else
            {
                //outDst = null;
                return(false);
            }
        }
Exemplo n.º 4
0
        public static TDst RecordEdit <TSrc, TDst>(this Pinhua2Context context, TSrc src,
                                                   Action <TSrc> Editing = null /*, Action<TRemote> AfterNew = null*/)
            where TSrc : _BaseTableMain
            where TDst : _BaseTableMain
        {
            var dst = context.Set <TDst>().FirstOrDefault(m => m.RecordId == src.RecordId);

            if (dst == null)
            {
                return(null);
            }

            Editing?.Invoke(src);

            src.CreateTime   = dst.CreateTime;
            src.CreateUser   = dst.CreateUser;
            src.LastEditTime = DateTime.Now;
            src.LastEditUser = src.LastEditUser ?? "张凯译";

            StaticAutoMapper.Current.Map <TSrc, TDst>(src, dst);
            context.Entry <TDst>(dst).State = EntityState.Modified;
            context.SaveChanges();

            return(dst);
        }
Exemplo n.º 5
0
        public IActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }
            //Common.ModelHelper.CompleteMainOnCreate(vm_地板);
            //vm_地板.品号 = _context.funcAutoCode("商品号");
            //_context.tb_商品表.Add(_mapper.Map<tb_商品表>(vm_地板));

            _context.funcNewRecord <vm_商品_地板, tb_商品表>(vm_地板, creating => {
                creating.品号 = _context.funcAutoCode("商品号");
            });

            _context.SaveChanges();

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 6
0
        private IActionResult UpdateOrder <TLocal, TLocalD, TRemote, TRemoteD>(TLocal local, IList <TLocalD> localDetails,
                                                                               Action <TLocal, TLocalD, TRemote, TRemoteD> DoBeforeRemove = null,
                                                                               Action <TLocal, TLocalD, TRemote, TRemoteD> DoBeforeAdd    = null)
            where TRemote : _BaseTableMain
            where TRemoteD : _BaseTableDetail
            where TLocal : _BaseTableMain
            where TLocalD : _BaseTableDetail
        {
            var remote = _context.Set <TRemote>().FirstOrDefault(m => m.RecordId == local.RecordId);

            if (remote == null)
            {
                return(NotFound());
            }

            // 非空字段赋值给跟踪实体
            //vm_销售订单.往来 = _context.Set<tb_往来表>().AsNoTracking().FirstOrDefault(p => p.往来号 == vm_销售订单.往来号)?.简称;
            _mapper.Map <TLocal, TRemote>(local, remote);

            var remoteDetails = _context.Set <TRemoteD>().Where(d => d.RecordId == remote.RecordId).ToList();

            // 数据库中的子单号与新明细中没有相同的,则从数据库中删除
            foreach (var remoteD in remoteDetails)
            {
                if (!localDetails.Any(p => p.子单号 == remoteD.子单号))
                {
                    DoBeforeRemove?.Invoke(local, null, null, remoteD);
                    _context.Remove <TRemoteD>(remoteD);
                }
            }

            foreach (var localD in localDetails)
            {
                Common.ModelHelper.CompleteDetailOnUpdate(remote, localD);

                if (remoteDetails.Any(d => d.子单号 == localD.子单号)) // 子单号相同的,表示修改
                {
                    var remoteD = _context.Set <TRemoteD>().FirstOrDefault(m => m.子单号 == localD.子单号);
                    _mapper.Map(localD, remoteD);
                }
                if (!remoteDetails.Any(d => d.子单号 == localD.子单号))
                {
                    if (string.IsNullOrEmpty(localD.子单号)) // 子单号为空的,表示新插入
                    {
                        DoBeforeAdd?.Invoke(local, localD, null, null);
                        //localD.子单号 = _context.funcAutoCode("子单号");
                        _context.Attach <TRemoteD>(_mapper.Map <TRemoteD>(localD)).State = EntityState.Added;
                    }
                    else if (!string.IsNullOrEmpty(localD.子单号)) // 子单号不为空,表示从报价单引入,插入
                    {
                        var baojiaD = _context.Set <tb_报价表D>().FirstOrDefault(d => d.子单号 == localD.子单号);
                        if (baojiaD != null)
                        {
                            baojiaD.状态 = "已下单";
                        }
                        _context.Attach <TRemoteD>(_mapper.Map <TRemoteD>(localD)).State = EntityState.Added;
                    }
                }
            }

            _context.SaveChanges();

            return(RedirectToPage("./Index"));
        }
Exemplo n.º 7
0
        public static bool TryRecordDetailsEdit <TSrc, TSrcD, TDst, TDstD>(this Pinhua2Context context, TSrc dto, IEnumerable <TSrcD> srcDSet,
                                                                           /*out IEnumerable<TDstD> outDstDSet,*/ Action <TSrcD> Adding = null, Action <TSrcD> Updating = null, Action <TDstD> Deleting = null)
            where TSrc : _BaseTableMain
            where TSrcD : _BaseTableDetail
            where TDst : _BaseTableMain
            where TDstD : _BaseTableDetail
        {
            var dst = context.Set <TDst>().AsNoTracking().FirstOrDefault(r => r.RecordId == dto.RecordId);

            if (dst == null)
            {
                //outDstDSet = null;
                return(false);
            }

            var dstDSet = context.Set <TDstD>().Where(d => d.RecordId == dst.RecordId);

            // 如果本地明细和数据库明细都是空的,说明明细表没有任何改变,直接返回 true
            if (!srcDSet.Any() && !dstDSet.Any())
            {
                //outDstDSet = dstDSet;
                return(true);
            }

            foreach (var DstD in dstDSet)
            {
                if (!srcDSet.Any(p => p.Idx == DstD.Idx)) // 新列表没有数据库中的Idx,则删除
                {
                    Deleting?.Invoke(DstD);
                    context.Remove <TDstD>(DstD);
                }
            }

            foreach (var srcD in srcDSet)
            {
                srcD.RecordId = dst.RecordId;

                if (dstDSet.Any(d => d.Idx == srcD.Idx)) // Idx有相同的,则修改
                {
                    Updating?.Invoke(srcD);

                    // 将删除的重新标记为修改
                    var dstD = dstDSet.FirstOrDefault(m => m.Idx == srcD.Idx);
                    context.Attach <TDstD>(dstD).State = EntityState.Modified;
                    StaticAutoMapper.Current.Map <TSrcD, TDstD>(srcD, dstD);
                }
                else if (!dstDSet.Any(d => d.Idx == srcD.Idx)) // Idx没有相同的,则添加
                {
                    Adding?.Invoke(srcD);
                    var dstD = StaticAutoMapper.Current.Map <TDstD>(srcD);
                    context.Attach <TDstD>(dstD).State = EntityState.Added;
                }
            }

            if (context.SaveChanges() > 0)
            {
                //outDstDSet = dstDSet.AsEnumerable<TDstD>();
                return(true);
            }
            else
            {
                //outDstDSet = null;
                return(false);
            }
        }