代码例子一:
//查出SomeEntity表的所有数据实体并循环
foreach(var entity in DataContext.SomeEntity.ToList()){
//更新编辑时间
entity.EditTime = DateTime.Now;
//提交执行Sql更新
DataContext.SubmitChanged();
}
//查出SomeEntity表的所有数据实体并循环 foreach(var entity in DataContext.SomeEntity.ToList()){ //更新编辑时间 entity.EditTime = DateTime.Now; //提交执行Sql更新 DataContext.SubmitChanged(); }
假如SomeEntity总共取出100条数据,取出来后会自动将这100条数据放入数据上下文(DataContext)中。
假如SomeEntity里面有10个字段,每一次循环提交更新(SubmitChanged),都会捡查一遍数据上下文中哪些数据有更改过,然后对更改过的实体执行Sql更新。
那么总捡查字段次数 = 数据上下文里的实体数量 * 实体字段数量 * 循环次数 = 100 * 10 * 100 = 10万次
代码例子二:
//查出SomeEntity表的所有数据实体并循环
foreach(var i = 0; i < 100; i++)
{
//创建实体
var entity = new SomeEntity();
//添加创建时间
entity.CreateTime = DateTime.Now;
//告诉数据上下文将要在提交后执行插入实体
DataContext.SomeEntity.InsertOnSubmit(entity);
//提交执行Sql更新
DataContext.SubmitChanged();
}
//查出SomeEntity表的所有数据实体并循环 foreach(var i = 0; i < 100; i++) { //创建实体 var entity = new SomeEntity(); //添加创建时间 entity.CreateTime = DateTime.Now; //告诉数据上下文将要在提交后执行插入实体 DataContext.SomeEntity.InsertOnSubmit(entity); //提交执行Sql更新 DataContext.SubmitChanged(); }
执行DataContext.SomeEntity.InsertOnSubmit后,会自动将实体加入数据上下文中。
假如SomeEntity里面有10个字段,每一次循环提交更新(SubmitChanged),都会捡查一遍数据上下文中哪些数据有更改过,然后对更改过的实体执行Sql插入和Sql更新。
那么总捡查字段次数 = 数据上下文里的实体数量 * 实体字段数量 * (循环最大数 / 2) = 100 * 10 * 50 = 5万次
因此为了避免需要大量执行增删改的操作时,对DataContext进行了封装改进。
改进代码例子一:
//查出SomeEntity表的所有数据实体并循环
foreach(var entity in DataContext.Read.SomeEntity.ToList()){
//更新编辑时间
entity.EditTime = DateTime.Now;
//将实体加入数据上下文中
DataContext.Write.SomeEntity.Attach(entity);
//提交执行Sql更新,并清空数据上下文所有实体
DataContext.SubmitChanged();
}
//查出SomeEntity表的所有数据实体并循环 foreach(var entity in DataContext.Read.SomeEntity.ToList()){ //更新编辑时间 entity.EditTime = DateTime.Now; //将实体加入数据上下文中 DataContext.Write.SomeEntity.Attach(entity); //提交执行Sql更新,并清空数据上下文所有实体 DataContext.SubmitChanged(); }
改进代码例子二:
//查出SomeEntity表的所有数据实体并循环
foreach(var i = 0; i < 100; i++)
{
//创建实体
var entity = new SomeEntity();
//添加创建时间
entity.CreateTime = DateTime.Now;
//告诉数据上下文将要在提交后执行插入实体
DataContext.Write.SomeEntity.InsertOnSubmit(entity);
//提交执行Sql更新,并清空数据上下文所有实体
DataContext.SubmitChanged();
}
//查出SomeEntity表的所有数据实体并循环 foreach(var i = 0; i < 100; i++) { //创建实体 var entity = new SomeEntity(); //添加创建时间 entity.CreateTime = DateTime.Now; //告诉数据上下文将要在提交后执行插入实体 DataContext.Write.SomeEntity.InsertOnSubmit(entity); //提交执行Sql更新,并清空数据上下文所有实体 DataContext.SubmitChanged(); }
在框架中的DataContext是经过改进,提交后会将清空数据上下文的所有实体,从而提升了增改删的执行效率。
而DataContext.Read取出来的实体不会自动加入到数据上下文中,从而提升了取数据的执行效率。