我正在使用SQL Geography类型,因为EFCore不支持类型地理,我需要执行存储过程来更新我的实体。
这很好用,但是当我调用刚更新的行时,它会返回旧值。 我可以在DB中看到正确的值。 以下是我的一些代码:
var FlId = new SqlParameter("@flId", SqlDbType.Int) { Value = testModel.Flid ?? SqlInt32.Null };
var OID = new SqlParameter("@oID", SqlDbType.Int) { Value = testModel.OID };
var flName = new SqlParameter("@flName", SqlDbType.VarChar) { Value = testModel.FLName };
var result = _dbContext.Database.ExecuteSqlCommand("testSchema.spUpsertOFL @flId, @oID, @flName,
parameters: new[] { FlId , OID , flName });
上面的代码可以运行并执行upsert,但是当我使用EFCore运行常规查询时,我会找回过时的记录。
var TestQuery = _dbContext.Fl.FirstOrDefault(x => x.FLCode == testModel.Flcode && x.OID == testModel.OID);
我尝试使用以下方法重新加载上下文:
_dbContext.Entry(fl).Reload();
但是我说错了:
"创建F1时出现内部错误。实体类型的实例' Fl'无法跟踪,因为已经跟踪了另一个具有{' FlID'}键值的实例。"
如果我使用postman并点击我的get端点 - 返回正确的结果。