Entity framework core 在asp.net core中更新的最佳方式是什么

Entity framework core 在asp.net core中更新的最佳方式是什么,entity-framework-core,Entity Framework Core,我正在看一些关于asp.net核心的教程编程 在一些教程中,讲师使用此代码更新数据库中的数据 DataContext db = new DataContext(); var query = db.TblUsers.where(x => x.Id == 3).single(); query.Name = "Sami"; db.TblUsers.Attach(query); db.Entry(query).state = EntityState.Modified; db.SaveChanges

我正在看一些关于asp.net核心的教程编程
在一些教程中,讲师使用此代码更新数据库中的数据

DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.TblUsers.Attach(query);
db.Entry(query).state = EntityState.Modified;
db.SaveChanges();
DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.Update(query);
db.SaveChanges();
但有些讲师使用此代码更新数据库中的数据

DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.TblUsers.Attach(query);
db.Entry(query).state = EntityState.Modified;
db.SaveChanges();
DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.Update(query);
db.SaveChanges();
事实上,我不知道该用哪一个?因为这两个代码都在工作。

请告诉我这些代码之间到底有什么不同?

对于您当前的代码,第一种方法不需要使用
附加
。若您想通过从数据库中检索记录来更新模型,请使用第二种方法,这非常方便

对于
Attach
,它会将图形中的实体置于未更改状态,并通过
db.Entry(query).state=EntityState.Modified
将实体设置为
Modified
,然后
查询中的更改将保存到数据库中。由于
db.TblUsers.where(x=>x.Id==3).single()
已经在跟踪
查询
,因此无需使用
附加

查询有两种类型,
跟踪
不跟踪
。如果没有像
db.TblUsers.AsNoTracking().where(x=>x.Id==3.single()
那样将查询指定为
no tracking
,则实体将跟踪
未更改的状态

对于
db.Update(查询),它将开始跟踪处于
EntityState.Modified
状态的给定实体,以便在调用Microsoft.EntityFrameworkCore.DbContext.SaveChanges时在数据库中更新该实体