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

时间:2017-07-09 05:11:17

标签: c# sql-server entity-framework

我正在使用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 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可能您正在尝试模拟并发访问的情况。如果是,那么请在第

行放置断点
if (customerMandate != null)

现在,修改数据库中的值并从断点开始前进。您可能会在SaveChangesAsync来电时遇到异常。

另一个认为您可以检查是在管理工作室中使用TSQL修改表中的state,然后在下次运行程序时customerMandate中有新状态可用。

在共享代码的第1行中使用它之前,我们无法看到DbContext的定义和使用位置。我希望您确保在开始另一个更新查询之前,DbContext上待处理的任何待处理项/操作已完成。如果没有那么那些可能导致失败。