如何选择要在EF中更新的特定字段

wor*_*ion 6 c# linq entity-framework

我想从@where获取数据库中的所有记录,然后更新它们.为此,我创建了一个这样的查询:

public async Task MarkAllAsActive()
{
    var currentUserId = _userManager.GetCurrentUserId();
    await _workOrders.Where(row => row.Status == WorkOrderStatus.Draft).ForEachAsync(row =>
    {
        row.Status = WorkOrderStatus.Active;
        _uow.MarkAsChanged(row, currentUserId);
    });
}
Run Code Online (Sandbox Code Playgroud)

但是此查询选择数据库中的所有字段并不好.为了解决这个问题我尽量选择像刚才特定字段ID,Status:

public async Task MarkAllAsActive()
{
    var currentUserId = _userManager.GetCurrentUserId();
    await _workOrders.Select(row=>new WorkOrder { Id=row.Id,Status=row.Status}).Where(row => row.Status == WorkOrderStatus.Draft).ForEachAsync(row =>
    {
        row.Status = WorkOrderStatus.Active;
        _uow.MarkAsChanged(row, currentUserId);
    });

}
Run Code Online (Sandbox Code Playgroud)

但它返回此错误:

无法在LINQ to Entities查询中构造实体或复杂类型"DataLayer.Context.WorkOrder".

我看过类似的帖子和同样的错误,但我的问题不同,因为我想更新.

我怎样才能做到这一点?

Ane*_*lou 1

遗憾的是,您必须获取整个实体。为了使用 EF 更新实体,编辑的类类型必须是 DbContext 映射实体。

如果您想要更新而不将实体提取到服务器,并且不编写任何 SQL,您可以使用实体框架扩展库

请参阅网站上的更新部分。