2
当调用DbContext.SaveChanges()
时,是否有任何性能优势来检查是否有任何更改要保存?例如:SaveChanges()开销
if (context.ChangeTracker.HasChanges())
context.SaveChanges()
或者这是种检查的是EF内部执行时SaveChanges()
叫?
当调用DbContext.SaveChanges()
时,是否有任何性能优势来检查是否有任何更改要保存?例如:SaveChanges()开销
if (context.ChangeTracker.HasChanges())
context.SaveChanges()
或者这是种检查的是EF内部执行时SaveChanges()
叫?
在内部,EF会执行检查以确定是否进行了更改,如果没有更改,它将不会提交任何内容(因此不会浪费资源)。
我希望这有助于
Stopwatch sw = new Stopwatch();
Stopwatch sw2 = new Stopwatch();
sw.Start();
var b = db.ChangeTracker.HasChanges();
sw.Stop();
sw2.Start();
var c = db.SaveChanges();
sw2.Stop();
Console.WriteLine("Elapsed(HasChanges)={0}", sw.Elapsed); //takes 0.0000889 miliseconds
Console.WriteLine("Elapsed(SaveChanges)={0}", sw2.Elapsed); // takes 0.0003563 miliseconds
Console.ReadLine();
尽管此代码可以回答这个问题,提供了关于如何和/或为什么它解决了这个问题将改善答案的长期价值附加的上下文。 – thewaywewere