Entity framework 如何在实体框架中刷新上下文?

Entity framework 如何在实体框架中刷新上下文?,entity-framework,Entity Framework,我首先使用实体框架代码,调用edit user,在edit user中调用正在编辑用户的存储过程。之后,我调用另一个方法从数据库中获取用户 问题是这个方法返回旧用户,所以我认为在调用第二个方法之前需要刷新上下文。如何在实体框架中刷新上下文 基于此页面: 我试着用这个: yourContext.Entry(yourEntity).Reload(); 但我不知道该怎么做 这是我的背景: var newUser = await authenticationContext.Users.Where(

我首先使用实体框架代码,调用edit user,在edit user中调用正在编辑用户的存储过程。之后,我调用另一个方法从数据库中获取用户

问题是这个方法返回旧用户,所以我认为在调用第二个方法之前需要刷新上下文。如何在实体框架中刷新上下文

基于此页面:

我试着用这个:

 yourContext.Entry(yourEntity).Reload();
但我不知道该怎么做

这是我的背景:

var newUser = await authenticationContext.Users.Where(u => u.Email == "user1@test.com").FirstOrDefaultAsync();
我试过:

 authenticationContext.Entry(authenticationContext.Users).Reload();
但这是一个错误

System.InvalidOperationException:实体类型Dbset不是当前上下文的模型的一部分


您是否尝试过重新初始化上下文

var newUser = await authenticationContext.Users.Where(u => u.Email == "user1@test.com").FirstOrDefaultAsync();
// do cool stuff with sprocs and whatnot here
authenticationContext = new AuthenticationContext(); // Or whatever your context model looks like
var newUser = await authenticationContext.Users.Where(u => u.Email == "user1@test.com").FirstOrDefaultAsync();
或者简单地使用“usings”,您希望始终使用新数据,而不是将上下文作为字段保留

using (var authenticationContext = new AuthenticationContext())
{
    var newUser = await authenticationContext.Users.Where(u => u.Email == "user1@test.com").FirstOrDefaultAsync();
}
您尝试的方法是重新加载EF跟踪器中存在的单个实体。不能为该方法提供DbSet。如果将实体连接到跟踪器,我想您会使用该方法:

var newUser = await authenticationContext.Users.Where(u => u.Email == "user1@test.com").FirstOrDefaultAsync();
// do cool stuff with sprocs and whatnot here
authenticationContext.Entry(newUser).Reload();
不过,正如回答中提到的,您可能需要考虑导航道具。您还需要记住,如果更改EF用于跟踪实体的值(我想这是主键,但我不确定),可能会得到不想要的结果


这就是你可以用代码做的。但是你应该清楚地考虑评论中的建议,必须提取你应该已经表示的代码气味。另外,我还没有测试过任何一个,希望它能起作用,并且/或者你能理解它的要点。

什么错误!?!?!?您还没有说明正在使用哪个数据库,但为什么不让存储过程返回更新的实体,而不是执行另一个查询?为什么要重新获取用户?您刚刚保存了它,因此它必须与数据库内容相同。或者它包含计算列吗?@GertArnold不包含,但当我更新并尝试获取它时,它会将我返回到旧上下文。为什么要在保存后获取它?您应该展示更多的代码来证明这是必要的。