Entity framework 问题:EF Core 3.1为使用Ado.Net更新的表列提供了不正确的值

Entity framework 问题:EF Core 3.1为使用Ado.Net更新的表列提供了不正确的值,entity-framework,ado.net,ef-core-3.1,Entity Framework,Ado.net,Ef Core 3.1,我的代码中有这样一种情况:首先,当我使用Ado.net更新表列时,然后当我使用EFCore 3.1使用DbContext.Entities获取特定表的数据时,我没有得到正确的值。 以下是我正在使用的代码: var sqlCommandText = "Update testTable set Value = 10"; var sqlConnection = (SqlConnection)_dbContext.Database.GetDbConnection(); using

我的代码中有这样一种情况:首先,当我使用Ado.net更新表列时,然后当我使用EFCore 3.1使用DbContext.Entities获取特定表的数据时,我没有得到正确的值。 以下是我正在使用的代码:

var sqlCommandText = "Update testTable set Value = 10"; 
var sqlConnection = (SqlConnection)_dbContext.Database.GetDbConnection();
using var sqlCommand = new SqlCommand(sqlCommandText); 
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
下面是efcore要使用的模型和DbContext-

   public class TestTable
   {
     public int Id {get;set;}
     public int Value {get;set;}
   }

   public class TestDbContext : DbContext 
  {
      public TestDbContext() : base("connectionString")
      {
      }
     
      public DbSet<TestTable> TestTable {get;set;}

  }
该值为0,而根据Ado.Net代码,该值应为10。
请告诉我这里有什么问题。

我不确定您的代码是否将值设置为10

试试这个

var sqlCommandText = "Update testTable set Value = 10;"; 
 var result= _dbContext.DataBase.ExecuteSqlCommand(sqlCommandText);
if(result==0) ...error
executeSql之后,dbContext不会自动刷新。您必须重新加载已更改的条目。并尝试使用FirstOrDefault而不是list:

var item= _dbContext.TestTable.FirstOrDefault();
if(item!=null)
{
_dbContext.Entry(item).Reload();
var columnsValue=item.Value;
}

请显示将这两个部分结合在一起的代码。如果上下文的缓存中已经有对象,则第二个查询不会覆盖缓存中的值。Sql查询会更改数据库中的值。我签入了数据库,值被计算出来了。
var item= _dbContext.TestTable.FirstOrDefault();
if(item!=null)
{
_dbContext.Entry(item).Reload();
var columnsValue=item.Value;
}