C# 实体框架在更改SQL Server中列的值后不更新列

C# 实体框架在更改SQL Server中列的值后不更新列,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我使用的是实体框架6。当我使用EF更新数据库的一列时。记录将毫无问题地更新,但在我使用update query更改SQL Server中列的值之后,EF不会更新列值,也不会引发任何异常 CustomerMandate customerMandate = await DbContext.CustomerMandates.FirstOrDefaultAsync(mandate => mandate.Id == 1, cancellationToken); if (customerMandat

我使用的是实体框架6。当我使用EF更新数据库的一列时。记录将毫无问题地更新,但在我使用update query更改SQL Server中列的值之后,EF不会更新列值,也不会引发任何异常

CustomerMandate customerMandate = await DbContext.CustomerMandates.FirstOrDefaultAsync(mandate => mandate.Id == 1, cancellationToken); 
if (customerMandate != null)
{
    customerMandate.State = newState;
    await DbContext.SaveChangesAsync(cancellationToken);// not working
}

DbContext newContext = new DbContext();
CustomerMandate customerMandate1 = await newContext.CustomerMandates.FirstOrDefaultAsync(mandate => mandate.Id == 1, cancellationToken); 
if (customerMandate1 != null)
{
    customerMandate1.State = newState;
    await DbContext.SaveChangesAsync(cancellationToken);// working
}
在正常情况下,应用程序更新的执行是正常的,但当我使用T-SQL DbContext.ChangeTracker.HasChanges()更改数据库中的值时返回false,但当我创建新上下文并从DB获取记录并更改它时,DbContext.ChangeTracker.HasChanges()返回true
有什么想法吗?

可能您正在尝试模拟并发访问的情况。如果是,请将断点放在直线上

if (customerMandate != null)
现在,修改数据库中的值并从断点向前移动。在
savechangesync
调用时,您可能会遇到异常

您可以检查的另一个想法是在ManagementStudio中使用TSQL修改表中的
状态
,然后在下次运行程序时检查新状态是否在
customerMandate
中可用


在共享代码的第1行中使用
DbContext
之前,我们无法看到它的定义和使用位置。我希望您已确保在启动另一个更新查询之前,已完成该
DbContext
上所有挂起的项目/操作。如果没有,那么这些可能会导致失败

请与我们共享您的代码。如果我错了,请纠正我,当您使用EF的update语句时,它工作,当您使用TSQL update语句时,它不工作?您如何尝试在TSQL中更新记录?我的意思是,如果您在代码中的某个地方使用断点,EF将使用与上下文相关的缓存。更新缓存有不同的方法,但最好的方法是使用工作单元模式(尽快处理上下文)。是@Valkyrie你是对的谢谢你的回答我编辑我的代码以更好地解释。请再次查看它好吗?你说的“工作”和“不工作”是什么意思?您的意思是,如果使用TSQL(通过SSMS)在DB中更改了值,您仍然无法获得
DbUpdateConcurrencyException
,还是说数据库没有更新?我认为这个问题的答案会让问题变得清楚。如果没有向数据库发送语句,则不会发生DbUpdateConcurrencyException。此外,如果修改了EntityState且元组确实存在(除非在SaveChanges()之前删除元组),则不会发生这种情况。我不太明白你是从哪里得到这个假设的。