初次使用EfCode First做导入和更新

EF codeFirst
读取excel订单的时候,因为一个excel里面根据订单编号里面分类 好几个订单 同一个订单编号里面还有好几个商品 把他们读取excel 插入到数据库 分别添加到订单表和订单明细表


```csharp
    public void SaveToDatabase(System.Data.DataTable dataTable)
        {
            using (var db = new yongyouContext())
            {
                List<Order> orderList = GetOrderList();
                foreach (var order in orderList)
                {
                    InsertOrUpdate(order);
                }

                List<Order> GetOrderList()
                {
                    List<Order> result = new List<Order>();

                    foreach (DataRow dr in dataTable.Rows)
                    {
                        string orderSn = dr["订单编号"].ToString();
                        string shopName = dr["店铺名称"].ToString();
                        string payTime = dr["付款日期"].ToString();
                        string shippingTime = dr["发货日期"].ToString();
                        string goodsNo = dr["条形码"].ToString();
                        int goodsCount = int.Parse(dr["订货数量"].ToString());
                        decimal goodsAmount = decimal.Parse(dr["实收金额"].ToString());

                        Order order = result.Where(p => p.OrderSn == orderSn).FirstOrDefault();
                        if (order == null)
                        {
                            result.Add(
                                new Order
                                {
                                    OrderSn = orderSn,
                                    ShopId = GetShopId(shopName),
                                    PayTime = Convert.ToDateTime(payTime),
                                    ShippingTime = Convert.ToDateTime(shippingTime),
                                    OrderDetails = new List<OrderDetail>()
                                    {
                                        new OrderDetail
                                        {
                                            GoodsNo = goodsNo,
                                            GoodsCount = goodsCount,
                                            GoodsAmount = goodsAmount,
                                        }
                                    }
                                });
                        }
                        else
                        {
                            order.OrderDetails.Add(
                                new OrderDetail
                                {
                                    GoodsNo = goodsNo,
                                    GoodsCount = goodsCount,
                                    GoodsAmount = goodsAmount,
                                });
                        }
                    }

                    return result;
                }

                int GetShopId(string shopName)
                {
                    var shop = db.Shops.Where(c => c.ShopName == shopName).FirstOrDefault();

                    if (shop == null)
                    {
                        throw new Exception($"店铺[{shopName}]不存在!");
                    }

                    return shop.ShopId;
                }

                void InsertOrUpdate(Order order)
                {
                    Order edbOrder = db.EdbOrderList.Where(p => p.OrderSn == order.OrderSn).FirstOrDefault();

                    if (edbOrder == null)
                    {
                        db.EdbOrderList.Add(order);
                    }
                    else
                    {
                        edbOrder.OrderDetails.RemoveAll(p => !order.OrderDetails.Any(q => q.GoodsNo == p.GoodsNo));
                        foreach (var orderDetail in order.OrderDetails)
                        {
                            var orderDetailInDb = edbOrder.OrderDetails.Where(p => p.GoodsNo == orderDetail.GoodsNo).FirstOrDefault();
                            if (orderDetailInDb == null)
                            {
                                edbOrder.OrderDetails.Add(orderDetail);
                            }
                            else
                            {
                                orderDetailInDb.GoodsNo = orderDetail.GoodsNo;
                                orderDetailInDb.GoodsCount = orderDetail.GoodsCount;
                                orderDetailInDb.GoodsAmount = orderDetail.GoodsAmount;
                            }
                        }
                    }

                    db.SaveChanges();
                }
            }
        }

代码块里面 的GetShopId()方法因为读取excel读取的是店铺的名字,插入数据库的时候得先根据店铺的名字查询出来店铺的id 然后插入到数据库

基本思路就是先处理读取excel出来数据使用工具类转换成datatable
遍历datatable 然后把订单号相同的订单的订单明细插入到订单的 OrderDetails 属性中 如果没有相同的订单和订单明细直接放到Order中 然后插入到数据库,插入数据库之前判断是否数据库中有重复的订单,如果没有则直接插入,如果有该订单则执行更新操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值