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;
});
我有一个 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;
});