首页 > 解决方案 > 实体框架附加/更新混淆 (EF Core)

问题描述

据我了解,当调用“更新”时,特定实体中的每个属性都会被修改。

另一方面,“附加”方法以“未修改”状态启动实体。然后,当对特定属性进行操作时,仅修改该特定属性。所以“附加”对单个属性更改更有用,而“更新”在您要更新实体中的每个属性时更有用(我的理解可能是错误的)。

但是,我不明白的是,在属性更改期间都没有调用这两种方法时会发生什么。例如,考虑一个名为“students”的表的示例:

student.City = "Calgary";
student.Name = "John Smith";
database.SaveChanges();

由于我们没有将实体中的任何属性标记为已修改,因此上述代码生成的查询有何不同?

标签: c#entity-frameworksql-update

解决方案


考虑以下代码:

students entity = new students() {
    Id = 1,
    City = "New York",
    Name = "Sam"
};
using(SomeContext ctx = new SomeContext())
{
    ctx.Entry(entity).State = EntityState.Modified;
    ctx.SaveChanges();
}

假设我们在数据库中有一条 id = 1 的记录,上面的代码将更新数据库中的那个实体。

Attach当您知道一个实体已经存在于数据库中但想要进行一些更改,同时在您已经进行更改时将状态更改为已修改时使用。


推荐阅读