EF Core 3.1 更新实体

Moh*_*ian 4 c# entity-framework entity-framework-core ef-core-3.0

我想使用 EF Core 更新我的实体。这两种方法中哪一种更有效且更好用。

Context.Entry(entity).State = EntityState.Modified
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

下一个是

var exist = entities.Find(entity.Id);
Context.Entry(exist).CurrentValues.SetValues(entity);  
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

两个主题都可以完成工作,但哪个更好?

Gur*_*ron 5

这取决于你的情况。第一个,据我了解应该重写数据库中的整个实体。如果上下文尚未跟踪实体,第二个可能会向数据库发出额外的请求,但应该仅更新实际已更改的字段。因此,如果您启用了更改跟踪并且已经将实体提取到上下文中,并且有很多列(或包含大量数据并且可以通过 EF 进行比较的列),那么第二个应该会更快。在其他情况下 - 第一个可以。