繁体   English   中英

EF Core:仅针对断开连接的实体的修改属性更新列

[英]EF Core : Update column only for modified properties from disconnected entity

我正在将 Entity Framework Core 3.1 与 SQL Server 一起使用。

我搜索如何更新列仅用于断开连接的实体的修改属性,例如:

public void UpdateOrderCustomer(int orderId, string customerName)
{
    var order = new Order { Id = orderId };

    using(var context = new MyDbContext())
    {
        context.Update(order);
        order.Customer = customerName;
        context.SaveChanges();
    }
}

但这会更新所有订单的列。

一种解决方案是在更新属性之前加载实体,例如:

public void UpdateOrderCustomer(int orderId, string customerName)
{
    using(var context = new MyDbContext())
    {
        var order = context.Orders.Single(o => o.Id == orderId);
        order.Customer = customerName;
        context.SaveChanges();
    }
}

但是为了加载实体,这会执行一个额外的无用查询。

我希望会有一个BeginTracking方法,但我还没有找到这个或任何类似的功能。

如何仅更新来自断开连接的实体的已修改属性的列?

您可以像这样更新单个属性或分离的实体:

public void ChangePassword(int userId, string password)
{
  var user = new User() { Id = userId, Password = password };
  using (var db = new MyEfContextName())
  {
    db.Users.Attach(user);
    db.Entry(user).Property(x => x.Password).IsModified = true;
    db.SaveChanges();
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM