表格保存

功能用途

将 增、删和改 变成一个API进行保存数据库,一般用于Winform等比较多

一、表格保存入门

2.1 跟踪实现

适合winform能用一个对象的操作

//通过跟踪实现
db.Tracking(getAll);//必须是个List

getAll.RemoveAt(0);//删除记录
getAll.Last().Name = "a";//修改
getAll.Add(new xxx(){...});//添加

db.GridSave(getAll).ExecuteCommand();//删除+更新+插入

2.2 手动对比实现

不是一个对象的可以指定对象实现

//1.删除不存在newList中的记录
//2.然后newList存在更新不存在删除
//不通过跟踪实现
db.GridSave(oldList, newList).ExecuteCommand(); //删除+更新+插入

二、性能说明

比如list 1000条只要更新 1条那么跟踪方式性能肯定好,

如果list 1000条要更新300条那么肯定手动对比性能好

原理:跟踪没办法做到 update join  因为每条记录列的数量不同只能 update set a;update set b..一条一条更新

而非跟踪方式可以用Update Join 批量更新方式,对于大数据非跟踪方式性能会更好

三、表格保存+导航 (支持非导航)

支持导航更新所有二级导航, 自动只支持到二级导航 (更多层级看标题四)

//通过跟踪实现
db.Tracking(getAll);
 
getAll.RemoveAt(0);//删除记录
getAll.Last().Name = "a";//修改

//没有导航也可以这样用 
db.GridSave(getAll).IncludesAllFirstLayer().ExecuteCommand();//删除+更新+插入


//不使用跟踪
db.GridSave(getAll, getAll2).IncludesAllFirstLayer().ExecuteCommand();

//可以排除不要更新导航
db.GridSave(getAll, getAll2).IncludesAllFirstLayer("Items").ExecuteCommand();

四、复杂应用

拆分操作可以处理更复杂的业务

4.1 复杂层级的导航

//拿出要删除的
var deleteObjs=db.GridSave(oldList, newList).GetDeleteList();

//执行导航删除
db.DeleteNav(ideleteObjs) 
     .Include(z1 => z1.SchoolA).ThenInclude(z1 => z1.RoomList)  
     .Include(z1 => z1.Books) 
     .ExecuteCommand();
     
//执行导航更新+插入    
db.UpdateNav(newList,new UpdateNavRootOptions() { IsInsertRoot = true })
    .Include(z1 => z1.SchoolA).ThenInclude(z1 => z1.RoomList) 
    .Include(z1 => z1.Books) 
    .ExecuteCommand();

4.2 结合BulkCopy

//拿出要删除的
var deleteObjs=db.GridSave(oldList, newList).GetDeleteList();
db.Deleteable(deleteObjs).PageSize(1000).ExecuteCommand();//高性能分页删除
db.Storageable(new Order()).PageSize(1000).ExecuteSqlBulkCopy()//大数据插入或者更新

//注意:BulkCopy底层是异步实现的如果winform中使用要当成异步方法使用不然会卡界面

五、只插或者更新(不要删除)

很多情况下我们是不要删除操作的可以用下面功能

5.1 普通插入或者更新

https://www.donet5.com/Home/Doc?typeId=2353

5.2 验证+插入和更新

https://www.donet5.com/Home/Doc?typeId=1208

5.3 导航插入或者更新

db.UpdateNav(newList,new UpdateNavRootOptions() { IsInsertRoot = true })//Option配置插入主表
    .Include(z1 => z1.SchoolA).ThenInclude(z1 => z1.RoomList) 
    .Include(z1 => z1.Books) 
    .ExecuteCommand();

https://www.donet5.com/Home/Doc?typeId=2432

关闭
果糖网