//主表的订单号和系表的订单号是一致的
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; }
}