c# - EF Core:仅更新来自断开实体的修改属性的列
问题描述
我将 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();
}
}
推荐阅读
- android - 我安装了 android studio 3.1.2。我注意到以下错误
- php - 将 acf 字段值存储在数组中
- java - 当我们在 JPanel 或 GlassPane 外部单击时退出它
- kendo-ui - 如何停止剑道颜色选择器小部件中的事件冒泡?
- bing - Azure Bing Web Search api,检索元数据
- elasticsearch - 尽管在索引和搜索中都使用了小写过滤器,为什么我的弹性搜索前缀查询区分大小写?
- javascript - 由 Tampermonkey 创建的链接在 Chrome 中有效,但在 Firefox 中无效?
- java - 二叉树高度实现
- docker - 如何使用 docker-py 将文件“挂载”到 docker 容器中的目录中?
- javascript - 将 SQL 数组数据解析为 php mail()