存储过程在 ef 核心中返回旧值
Posted
技术标签:
【中文标题】存储过程在 ef 核心中返回旧值【英文标题】:Stored Procedure returns old value in ef core 【发布时间】:2016-09-11 08:40:23 【问题描述】:我有一个 ASP.NET Core Web API。我正在使用带有存储过程的原始 SQL 来计算一些值:
private TestContext context;
public TestRepository(TestContext tContext)
context = tContext;
public IEnumerable<test> GetTests(User user)
return context.tests.FromSql("EXECUTE dbo.test_GETALL 0", user.code).ToList();
当我向表中插入新记录时,结果必须更改,但此代码返回旧值。我该如何解决这个问题?
【问题讨论】:
数据库中有新数据吗? 你是如何调用 API 的?虽然 jquery ajax 还是什么方法?听起来请求被缓存了。您可以通过运行探查器跟踪来验证数据库是否被命中。 @Sampath 是的,插入新数据后,我再次调用存储过程。但它返回旧值。 @firste 我使用 HttpClient 调用 API 您可以使用SQL profiler
来识别您的SP
是否在SQL server
上运行?你能看到吗?
【参考方案1】:
如果 TestContext 连接到 EF,那就是问题所在,否则您的事务可能配置错误。
【讨论】:
【参考方案2】:我自己也遇到过类似的问题。
检查您的 startup.cs 并确保服务和存储库不是 .AddSingleton
。
这些需要更改为.AddScoped
(您也可以使用.AddTransient
)
services.AddSingleton<IYourService, YourService>(); //Needs to be AddScoped
services.AddSingleton<IYourRepository, YourRepository>(); //Also needs to be AddScoped
如果您需要更多详细信息,这里是my SO question that I believe relates to your situation。
希望这会有所帮助!
【讨论】:
以上是关于存储过程在 ef 核心中返回旧值的主要内容,如果未能解决你的问题,请参考以下文章