我正在使用Entity Framework 6.当我使用EF更新数据库的列时。记录将更新没有任何问题,但在我使用更新查询更改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但是当我创建新的Context并从DB获取记录并更改它时DbContext.ChangeTracker.HasChanges ()返回true 有什么想法吗?
答案 0 :(得分:0)
可能您正在尝试模拟并发访问的情况。如果是,那么请在第
行放置断点if (customerMandate != null)
现在,修改数据库中的值并从断点开始前进。您可能会在SaveChangesAsync
来电时遇到异常。
另一个认为您可以检查是在管理工作室中使用TSQL修改表中的state
,然后在下次运行程序时customerMandate
中有新状态可用。
在共享代码的第1行中使用它之前,我们无法看到DbContext
的定义和使用位置。我希望您确保在开始另一个更新查询之前,DbContext
上待处理的任何待处理项/操作已完成。如果没有那么那些可能导致失败。