EF Core 3.1 select 特定列并更新它

EF Core 3.1 select specific column and update it

我有一个 table 客户端有两打列,我只需要更新一列。我没有加载整行,而是加载了我需要更新的列,我更新了值,然后调用 SaveChanges()。列未更新。下面是我的代码:

public async Task DeleteClients(IEnumerable<long> clientIds)
{
    var dbClients = await (from client in dbContext.Client
                           where clientIds.Contains(client.Id)
                           select new Client
                           {
                               Id = client.Id,
                               ClientStatusId = client.ClientStatusId
                           }).ToListAsync();

    dbClients.ForEach(dbClient =>
    {
        dbClient.ClientStatusId = (int)ClientStatusEnum.Deleted;
    });

    await unitOfWork.SaveAsync();
}

谁能告诉我为什么它没有更新,因为我没有使用 NoTracking?

Can anyone suggests why it is not updating

因为你没有select Client实体,而只是投影Client对象(所谓的存根)。投影对象,即使是实体类型,也不附加到上下文。例如,您可以轻松创建没有键值的客户。自动附加它们会将它们附加为 Added,这不是您想要的。

因此您必须明确附加客户端:

    ...

    dbContext.Client.AttachRange(dbClients);

    dbClients.ForEach(dbClient =>
    {
        dbClient.ClientStatusId = (int)ClientStatusEnum.Deleted;
    });