我正在看一些关于 asp.net core 的教程编程
在一些教程中,讲师使用此代码更新数据库中的数据
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
第一种方式。如果您想通过从数据库中检索记录来更新模型,请使用第二种方式,这样更方便。
对于Attach
,它会将图中的实体置于未更改状态,并将实体设置为Modified
by db.Entry(query).state = EntityState.Modified
,然后将更改query
保存到数据库中。既然db.TblUsers.where(x => x.Id == 3).single()
已经在跟踪了query
,就没有必要使用Attach
.
有两种类型的查询,tracking
和no-tracking
。如果您没有像no-tracking
预期那样具体查询db.TblUsers.AsNoTracking().where(x => x.Id == 3).single()
,则实体将跟踪哪个Unchanged
状态。
对于db.Update(query);
,它将开始跟踪状态中的给定实体,EntityState.Modified
以便在调用 Microsoft.EntityFrameworkCore.DbContext.SaveChanges 时在数据库中更新它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句