反映EF上下文中存储过程所做的更改

本文关键字:存储过程 EF 上下文 反映 | 更新日期: 2023-09-27 18:26:50

我使用SimpletInjector在控制器中注入entity framework上下文,使用以下代码:

    private static void Initializer(Container container)
    {
        container.RegisterSingle<IDbContext,  SpotterContext>();
        container.RegisterSingle<IUnitOfWork, UnitOfWork>();
    }

我正在使用注入的上下文来执行存储过程,该存储过程将只有UPDATEDELETE语句,使用以下代码:

context.Database.ExecuteSqlCommand(<spname>, <params array>);         

我面临的问题是,数据库中存储过程所做的更改没有反映在上下文中,当使用上下文访问更新的数据时,我得到的是旧数据,而不是更新的数据。

如何在执行存储过程后更新context以从数据库中获取最新数据?

反映EF上下文中存储过程所做的更改

最近不得不解决完全相同的问题。看起来,上下文的Entry成员的Reload()方法工作得很好。

对不起,我不懂C#,所以无法发布该语言的代码示例。在VB.NET中,它看起来像这样:

Dim CurClient As Client = Ctx.Clients.Where(Function(cl) cl.Id = ClientId).First()
Ctx.Entry(Of Client)(CurClient).Reload()

这里,Ctx是EF上下文。

我唯一还没有测试的是,如果存在子表,这个方法是否也会重新加载子表中的记录。