EF在crud的例子+批量操作
遇到的错误:
第一:报错:“ObjectStateManager 不包含具有对“XXX”类型的对象的引用的 ObjectStateEntry
解决方案:修改实体的方法 不仅仅 EntityState,根据修改整个实体 或者 实体中的几个字段,选择使用ApplyCurrentValues or EntityState
第二:批量操作
第一种:不出所料,执行成功,但EF的上下文特性的前提是所有对数据的更改都要通过主键定位完成,so,它会针对每个已编辑或已删除实体单独生成一条语句。如果一次操作有多个个实体需要更新,可想效率极差,追踪DB porfile,会发现 foreach,对DB开关数次。
public void TestMethod6()
{
using (var entities = new DistributionEntities())
{
var test = entities.Stock.Where(o => o.Quantity == 0).ToList();
foreach (var t in test)
entities.Stock.Remove(t);
entities.SaveChanges();
}
}
解决方案:
不管怎样,有人按捺不住,写了一个扩展组件EntityFramework.Extended,可以通过NuGet获取,可参看Entity Framework Batch Update and Future Queries。现在我们可以这样:
public void TestMethod4()
{
using (var entities = new DistributionEntities())
{
entities.Stock.Delete(o => o.Quantity == 0);
}
}
避免了往返数据库两次的尴尬,同时只生成了一条语句:
参考:
http://www.cnblogs.com/lingyuan/archive/2010/10/29/1864345.html

浙公网安备 33010602011771号