Entity framework 问题:EF Core 3.1为使用Ado.Net更新的表列提供了不正确的值
我的代码中有这样一种情况:首先,当我使用Ado.net更新表列时,然后当我使用EFCore 3.1使用DbContext.Entities获取特定表的数据时,我没有得到正确的值。 以下是我正在使用的代码: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
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;
}