存储过程在 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 核心中返回旧值的主要内容,如果未能解决你的问题,请参考以下文章

EF4 - 选定的存储过程不返回任何列

关于EF执行返回表的存储过程

EF 4.1 从存储过程返回结果

EF 无法从 #temp 表中选择的存储过程推断返回模式

EF执行存储过程返回DataSet

C#,EF中执行存储过程返回一个ObjectResult对象,这个对象是延迟加载的吗?