【问题标题】:db.Entry vs db.update in Entity Framework CoreEntity Framework Core 中的 db.Entry 与 db.update
【发布时间】:2020-10-09 14:48:19
【问题描述】:

我正在学习如何在 .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);
}

两者都对我有用,但它们之间有什么区别?

【问题讨论】:

    标签: .net rest asp.net-web-api sql-update


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

    我总结在DbContext update接口的描述中。希望能帮到你

    【讨论】:

    • 你的情况是一样的
    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2018-09-29
    • 1970-01-01
    相关资源
    最近更新 更多