数据库.实体框架核心中的条目与数据库更新



我正在学习如何在.NET Core中创建Web API,我意识到还有另一种方法可以更新条目。。。

我通常使用更新条目

if (ModelState.IsValid)
{
db.update(pais);
db.SaveChanges();
return new CreatedAtRouteResult("GetById", new { id = pais.Id }, pais);
}

但看了一段视频,我意识到他使用了:

if (ModelState.IsValid)
{
db.Entry(pais).State = EntityState.Modified;
db.SaveChanges();
return new CreatedAtRouteResult("GetById", new { id = pais.Id }, pais);
}

两者都为我工作,但它们之间有什么区别?

  • DbContext更新:对于具有生成键的实体类型,如果实体设置了主键值,则将在Microsoft.EntityFrameworkCore.EntityState.Modified状态下跟踪它。如果未设置主键值,则将在Microsoft.EntityFrameworkCore.EntityState.Addd状态下对其进行跟踪。这有助于确保插入新实体,同时更新现有实体。如果主键属性设置为属性类型的CLR默认值以外的任何值,则实体被视为已设置其主键值
  • DbContext条目:对于没有生成键的实体类型,状态集始终为Microsoft.EntityFrameworkCore.EntityState.Modified。请使用Microsoft.EntityFrameworks Core.ChangeTracking.EntityEntry.state仅设置单个实体的状态

我在DbContext update接口的描述中对此进行了总结。希望能帮助你

最新更新