反映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>();
}
我正在使用注入的上下文来执行存储过程,该存储过程将只有UPDATE
或DELETE
语句,使用以下代码:
context.Database.ExecuteSqlCommand(<spname>, <params array>);
我面临的问题是,数据库中存储过程所做的更改没有反映在上下文中,当使用上下文访问更新的数据时,我得到的是旧数据,而不是更新的数据。
如何在执行存储过程后更新context
以从数据库中获取最新数据?
最近不得不解决完全相同的问题。看起来,上下文的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上下文。
我唯一还没有测试的是,如果存在子表,这个方法是否也会重新加载子表中的记录。