C#对主细表的实现模块后端模块1


    //主表的订单号和系表的订单号是一致的
    public class OrderMains
    {
        public int Id { get; set; }//系统自动增长
        public string order_Id { get; set; }//订单号//系统生成
        public string orderDate { get; set; }//订单日期
        public string orderMoney { get; set; }//订单总额
        public string marketId { get; set; }//商场id,里面有很多商场的信息
    }
细表
    public class OrderFines
    {
        public int Id { get; set; }//系统自动增长
        public string order_Id { get; set; }//订单号(总号)//系统生成
        public string shopp_Id { get; set; }//商品序号//系统生成
        public string shopp_name { get; set; }//商品名称m
        public string shopp_price { get; set; }//商品单价
        //public string shopp_Id { get; set; }//商品id
        public int shopp_num { get; set; }//商品数量
        public string tatol_money { get; set; }//商品总价

    }
主细表的操作接口
interface IOrderMainFineRepository
    {
        bool MainFineAdd(OrderMain item, List<OrderFine> item2);//主细同时添加
        void MainFineUpdate(OrderMain item, List<OrderFine> itemList);//主细同时更新
        bool MainFineDelete(string id);//主细同时删除
        int MainFineDeleteBatch(string[] ids);//主细同时批量删除
        bool mainUpdateToFineAdd(OrderMain item, List<OrderFine> itemList);//增加细表更新主表
        bool mainUpdateToFineDelete(OrderMain item, List<OrderFine> itemList);//删除细表更新主表

        IEnumerable<OrderMain> LoadOrderMainPageData(OrderParam p, out int total);//获取细表的分页数据

    }

主细表的实现类


    public class OrderMainFineRepository : IOrderMainFineRepository
    {
        private masterEntities db = new masterEntities();
        /// <summary>
        /// 对主细表进行增加操作
        /// </summary>
        /// <param name="item"></param>
        /// <param name="itemList"></param>
        /// <returns></returns>
        public bool MainFineAdd(OrderMain item, List<OrderFine> itemList)
        {
            try
            {
                db.OrderMains.Add(item);//主表入库
                foreach (var nn in itemList)//细表入库
                {
                    db.OrderFines.Add(nn);//细表入库
                }
                db.SaveChanges();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 这个是主细表同时删除的
        /// </summary>
        /// <param name="orderid"></param>
        /// <returns></returns>
        public bool MainFineDelete(string orderid)
        {
            var orderfine = db.OrderFines.AsEnumerable();
            if (!string.IsNullOrEmpty(orderid))//只要不为空,就装入对象里面
            {
                orderfine = orderfine.Where(p => p.order_Id.Contains(orderid));//这里的Category是通过对应的编号进行取值
            }
            List<OrderFine> finelist = orderfine.ToList();
            foreach (var ss in finelist)
            {
                db.OrderFines.Remove(ss);
            }
            var ordermain = db.OrderMains.AsEnumerable();
            if (!string.IsNullOrEmpty(orderid))//Name只要不为空,就装入对象里面
            {
                ordermain = ordermain.Where(p => p.order_Id.Contains(orderid));
            }
            List<OrderMain> mainlist = ordermain.ToList();
            foreach (var mm in mainlist)
            {
                db.OrderMains.Remove(mm);
            }
            if (db.SaveChanges() > 0)//通过同一个db一次性保存
            { return true; }
            else
            { return false; }
        }

        /// <summary>
        /// 进行遍历删除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public int MainFineDeleteBatch(string[] ids)
        {
            foreach (string orderid in ids)
            {
                MainFineDelete(orderid);
            }
            return -1;
        }
        /// <summary>
        /// 对主细表的更新操作
        /// </summary>系表一旦发生改变主表的总金额一定会改变
        /// <param name="item"></param>
        /// <param name="item2"></param>
        /// <returns></returns>
        public void MainFineUpdate(OrderMain item, List<OrderFine> itemList)
        {
            try
            {
                if (item == null || itemList == null)
                {
                    throw new ArgumentException("对象不能为null");
                }
                var entry = db.Entry(item);
                if (entry.State == EntityState.Detached)
                {
                    var set = db.Set<OrderMain>();
                    OrderMain attachedOrderMain = set.Local.SingleOrDefault(p => p.Id == item.Id);
                    if (attachedOrderMain != null)//如果已经被上下文追踪
                    {
                        var attachedEntry = db.Entry(attachedOrderMain);
                        attachedEntry.CurrentValues.SetValues(item);
                    }
                    else
                    {
                        entry.State = EntityState.Modified;
                    }
                }
                foreach (var ss in itemList)
                {
                    var entry2 = db.Entry(ss);
                    if (entry2.State == EntityState.Detached)
                    {
                        var set2 = db.Set<OrderFine>();
                        OrderFine attachedOrderFine = set2.Local.SingleOrDefault(p => p.Id == ss.Id);
                        if (attachedOrderFine != null)
                        {
                            var attachedEntry = db.Entry(attachedOrderFine);
                            attachedEntry.CurrentValues.SetValues(ss);
                        }
                        else //如果不在当前上下文追踪
                        {
                            entry2.State = EntityState.Modified;
                        }
                    }
                }

                db.SaveChanges();//一次性用db保存
            }
            catch (Exception)
            {
                Console.WriteLine("更新出错");
            }
        }
        /// <summary>
        /// 获取细表的所有信息
        /// </summary>
        /// <param name="pa"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        public IEnumerable<OrderFine> LoadOrderFinePageData(OrderParam pa, out int total)
        {
            var ptype = db.OrderFines.AsEnumerable();
            if (!string.IsNullOrEmpty(pa.order_Id))//只要不为空,就装入对象里面
            {
                ptype = ptype.Where(p => p.order_Id.Contains(pa.order_Id));
            }
            total = ptype.Count();//算总数
            IEnumerable<OrderFine> result = ptype
                .OrderByDescending(x => x.order_Id)
                .Skip(pa.PageSize * (pa.PageIndex - 1))
                .Take(pa.PageSize);

            return result;
        }

        /// <summary>
        /// 可以通过订单号orderId去查询
        /// </summary>
        /// <param name="pa"></param>
        /// <returns></returns>
        public List<OrderMain> GetByOrderMainId(OrderParam pa)
        {
            IEnumerable<OrderMain> ordermain = db.OrderMains.AsEnumerable();
            if (!string.IsNullOrEmpty(pa.order_Id))//Name只要不为空,就装入对象里面
            {
                ordermain = ordermain.Where(p => p.order_Id.Contains(pa.order_Id));
            }
            return ordermain.ToList();
        }
        /// <summary>
        /// 对细表的删除同时要对主表进行更新
        /// </summary>
        /// <param name="orderid"></param>
        /// <returns></returns>
        public bool mainUpdateToFineDelete(OrderMain item, List<OrderFine> itemList)
        {
            if (item == null || itemList == null)
            {
                throw new ArgumentException("对象不能为null");
            }
            foreach (var ss in itemList)
            {
                OrderFine pt = db.OrderFines.Find(ss.Id);
                db.OrderFines.Remove(pt);//先对细表进行删除
            }
            var entry = db.Entry(item);
            if (entry.State == EntityState.Detached)
            {
                var set = db.Set<OrderMain>();
                OrderMain attachedOrderMain = set.Local.SingleOrDefault(p => p.Id == item.Id);
                if (attachedOrderMain != null)//对主表进行更新
                {
                    var attachedEntry = db.Entry(attachedOrderMain);
                    attachedEntry.CurrentValues.SetValues(item);
                }
                else
                {
                    entry.State = EntityState.Modified;
                }
            }
            if (db.SaveChanges() > 0)//通过同一个db一次性保存
            { return true; }
            else
            { return false; }
        }
        /// <summary>
        /// 对细表的增加对主表的更新
        /// </summary>
        /// <param name="item"></param>
        /// <param name="itemList"></param>
        /// <returns></returns>
        public bool mainUpdateToFineAdd(OrderMain item, List<OrderFine> itemList)
        {
            if (item == null || itemList == null)
            {
                throw new ArgumentException("对象不能为null");
            }
            foreach (var nn in itemList)//细表入库
            {
                db.OrderFines.Add(nn);//细表入库
            }
            var entry = db.Entry(item);//对主表进行更新
            if (entry.State == EntityState.Detached)
            {
                var set = db.Set<OrderMain>();
                OrderMain attachedOrderMain = set.Local.SingleOrDefault(p => p.Id == item.Id);
                if (attachedOrderMain != null)
                {
                    var attachedEntry = db.Entry(attachedOrderMain);
                    attachedEntry.CurrentValues.SetValues(item);
                }
                else
                {
                    entry.State = EntityState.Modified;
                }
            }
            if (db.SaveChanges() > 0)//通过同一个db一次性保存
            { return true; }
            else
            { return false; }
        }
        /// <summary>
        /// 这里获取主表的信息封装成页
        /// </summary>
        /// <param name="pa"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        public IEnumerable<OrderMain> LoadOrderMainPageData(OrderParam pa, out int total)
        {
            var ptype = db.OrderMains.AsEnumerable();
            if (!string.IsNullOrEmpty(pa.order_Id))//只要不为空,就装入对象里面
            {
                ptype = ptype.Where(p => p.order_Id.Contains(pa.order_Id)); 
            }
            total = ptype.Count();//算总数
            IEnumerable<OrderMain> result = ptype
                .OrderByDescending(x => x.order_Id)
                .Skip(pa.PageSize * (pa.PageIndex - 1))
                .Take(pa.PageSize);

            return result;
        }
        /// <summary>
        /// 通过主表的id获取信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public OrderMain GetById(int id)
        {
            return db.OrderMains.Find(id);
        }
    }

   

context里面需要对要操作的类进行添加,这里直接可以通过更新数据库的连接就OK啦(ef上下文)

   

 public partial class masterEntities : DbContext
    {
        public masterEntities()
            : base("name=dbConnectionEntities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Market> Markets { get; set; }
        public virtual DbSet<OrderFine> OrderFines { get; set; }
        public virtual DbSet<OrderMain> OrderMains { get; set; }
        public virtual DbSet<Product> Products { get; set; }
        public virtual DbSet<Ptype> Ptypes { get; set; }
    }

猜你喜欢

转载自blog.csdn.net/penghao_1/article/details/82620150
今日推荐