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

时间:2014-10-17 11:24:45

标签: c# sql-server entity-framework stored-procedures simple-injector

我使用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以从数据库获取最新数据?

1 个答案:

答案 0 :(得分:1)

最近必须解决完全相同的问题。如图所示,上下文'Reload()成员的Entry方法效果很好。

抱歉,我不知道C#,因此无法在该语言上发布代码示例。在VB.NET中它看起来像这样:

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

Ctx.Entry(Of Client)(CurClient).Reload()

这里,Ctx是一个EF上下文。

我还没有测试过的唯一一件事就是这个方法是否也会从子表中重新加载记录(如果它们存在)。