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中 然后插入到数据库,插入数据库之前判断是否数据库中有重复的订单,如果没有则直接插入,如果有该订单则执行更新操作