EF之DetectChanges()、AutoDetectChangesEnabled()、SaveChanges()

一、AutoDetectChangesEnabled():用于操作EF模型集合时,出于性能考虑,所以在批量操作的时候需要把自动跟踪关闭,
具体用法如下:
(仓储模式中,此方法针对单个仓储中的模型操作)
try
{
    context.Configuration.AutoDetectChangesEnabled = false;

    foreach (var p in mfpCustomers)  
    {  
        db.Customers.Add(p);         
    }  
}
finally
{
    context.Configuration.AutoDetectChangesEnabled = true;
}


二、DetectChanges():同步对象与其属性的状态。
AutoDetectChangesEnabled:自动跟踪对象的属性变化,默认为true。

如果AutoDetectChangesEnabled=true,那么对象与其属性的状态会自动立即同步,因此可直接调用SaveChanges();
反之,如果AutoDetectChangesEnabled=false,则需手动调用DetectChanges()后,再调用SaveChanges()才会生效。

三、AcceptAllChanges():上下文能跟踪状态为Added、Modified、Deleted的所有对象,修改他们的状态为Unchanged。在SaveChanges()失败时不 会调用该方法。
四、SaveChanges():
1.只有当AutoDetectChangesEnabled=true,ValidateOnSaveEnabled=false的情况下,在保存之前才会调用DetectChanges()
2.当保存成功后,始终都会调用AcceptAllChanges()


参考:
http://www.cnblogs.com/happyframework/p/3590112.html
https://www.cnblogs.com/ceci/p/4381075.html
https://stackoverflow.com/questions/9439430/improving-performance-of-initializing-dbset-in-seed
http://www.cnblogs.com/guomingfeng/archive/2013/05/28/mvc-ef-repository.html#autoid-1-0-0

posted @ 2018-07-19 13:19  skybirdzw  阅读(1169)  评论(0编辑  收藏  举报