C# 何时调用SaveChanges

C# 何时调用SaveChanges,c#,asp.net-mvc-4,entity-framework-5,C#,Asp.net Mvc 4,Entity Framework 5,假设我有这样的东西,在控制器中调用: using (var context = new SqlContext()) { context.Items.Add(new Item("item1")); } 我是否应该调用context.SaveChanges()?是。 在context.SaveChanges()之前,不会保存您所做的每项更改被调用 请注意,如果您将拥有来自其他DbContext的对象(这绝对不是您给出的情况),则应该使用以下代码行显式更改实体状态: Item item =

假设我有这样的东西,在
控制器中调用:

using (var context = new SqlContext())
{
    context.Items.Add(new Item("item1"));
}
我是否应该调用
context.SaveChanges()

是。

context.SaveChanges()之前,不会保存您所做的每项更改被调用

请注意,如果您将拥有来自其他DbContext的对象(这绝对不是您给出的情况),则应该使用以下代码行显式更改实体状态:

Item item = new Item("item1")
db.Entry(item).State = EntityState.Modified;
db.SaveChanges();

entity framework使用DbContext实现了一个工作单元模式,这意味着您定义了一个要对数据库执行的操作包,然后调用save changes将所有更改一次发布到数据库中。所有操作都将在单个事务中执行(对于单个saveChanges调用),这意味着要么全部执行,要么全部不执行,都将一次分发到数据库


在调用save changes之前,这些更改将应用于本地跟踪图,但在调用savechanges之前不会应用于数据库本身。

在一般工作单元中,用户操作的所有更改都应立即发生。在大多数情况下,这意味着您不应该跨越DbContext的实例,如果是这样的话。Attach->make change->SaveChanges是建议的方法。我唯一一次使用显式修改标志是在EF顶部实现其他数据上下文(如通用存储库),在本地
DbContext
被释放后,本地跟踪图是否会被持久化?如果在
DbContext
被释放之前我没有调用
SaveChanges()
,我应该在哪里调用它?不处理上下文将放弃任何挂起的更改,跟踪图只存在于上下文的生命周期中,因此在上下文被删除时它将被删除disposed@CalebJares调用dispose而不调用savechanges将放弃所有挂起的更改谢谢!这回答了我需要知道的一切。