在ASP.NET Core中更新的最佳方法是什么

时间:2018-08-13 07:26:22

标签: 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();

但是一些讲师使用此代码来更新数据库中的数据

DataContext db = new DataContext();
var query = db.TblUsers.where(x => x.Id == 3).single();
query.Name = "Sami";
db.Update(query);
db.SaveChanges();

事实上,我混淆了使用其中的哪个?因为两个代码都起作用。
请告诉我这些代码之间到底有什么不同?

1 个答案:

答案 0 :(得分:0)

对于您当前的代码,第一种方法无需使用Attach。如果要通过从数据库检索记录来更新Model,请使用第二种方式,这非常方便。

对于Attach,它将把图中的实体置于未更改状态,并通过Modified将实体设置为db.Entry(query).state = EntityState.Modified,然后将保存query中的更改到数据库。由于db.TblUsers.where(x => x.Id == 3).single()已经在跟踪query,因此无需使用Attach
查询有两种类型,trackingno-tracking。如果您没有像no-tracking那样将查询具体指定为db.TblUsers.AsNoTracking().where(x => x.Id == 3).single(),则该实体将跟踪Unchanged状态。

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