6

假设我有这样的东西被称为 Controller

using (var context = new SqlContext())
{
    context.Items.Add(new Item("item1"));
}

我应该打电话context.SaveChanges();吗?

4

2 回答 2

11

实体框架使用 DbContext 实现了一个工作单元模式,这意味着您定义了一组您想要对数据库执行的操作,然后调用保存更改以一次将它们全部传播到数据库。所有操作都将在单个事务中执行(对于单个 saveChanges 调用),这意味着要么全部要么不立即传播到数据库。

在调用 savechanges 之前,更改将应用​​于您的本地跟踪图,但不会应用于数据库本身,直到调用 savechanges。

于 2013-01-11T00:51:11.063 回答
1

是的。

在调用之前,您所做的每一个更改都不会被保存context.SaveChanges();

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

Item item = new Item("item1")
db.Entry(item).State = EntityState.Modified;
db.SaveChanges();
于 2013-01-11T00:45:31.573 回答