我一直想知道的一个问题是,我应该显式调用 context.SaveChanges()
还是让它在 Dispose()
下。
方法 1:自动保存
public virtual void Dispose()
{
context.SaveChanges();
context.Dispose();
}
假设我们将用户添加到 UserRepository
(或使用依赖注入(inject))
using (var repo = new UserRepository())
{
repo.Add(user);
}
方法 2:显式保存
public virtual void SaveChanges()
{
context.SaveChanges();
}
public virtual void Dispose()
{
context.Dispose();
}
假设我们将用户添加到 UserRepository
(或使用依赖注入(inject))
using (var repo = new UserRepository())
{
repo.Add(user);
repo.SaveChanges();
}
所以我的问题是:Auto-Save
生成更清晰的代码,但操作的开销有多大?哪种方法更好?
我不知道细节,但我怀疑你是否想在执行只读查询时调用 SaveChanges
,例如,你所显示的将调用 SaveChanges
在所有情况下。
我确实写了类似的东西,这样我就可以快速轻松地写入数据库,但是你不应该将 SaveChanges
混入 Dispose
方法本身,那绝对不好。
public static void UseAndSave(
Action<Context> pAction
) {
using (var context = new Context()) {
pAction(context);
context.SaveChanges();
}
}
...
Context.UseAndSave(context => context.Users.Add(user));
(也可以写一个带有Func
的版本)
我是一名优秀的程序员,十分优秀!