_dbContext.Database.ExecuteSqlCommand

时间:2018-03-26 21:19:23

标签: c# sql entity-framework ef-core-2.0

我正在使用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端点 - 返回正确的结果。

0 个答案:

没有答案