我正在使用Linq2SQL执行存储过程来更新用户:
var oldUser = _context.Users.Single(u => u.id == id).Clone(); // clone old object
_context.UpdateUserSP("NewName"); //update user via sp
var updatedUser = _context.Users.Single(u => u.id == id); // this is not updated after sp is executed
我遇到的问题是“updatedUser”并不反映SP所做的更改。
我有点理解为什么,但我不知道如何刷新DataContext来反映这些变化。
我尝试了_context.Refresh(.......);
,但我根本无法刷新上下文。
任何帮助都将不胜感激。
答案 0 :(得分:3)
我也在努力解决这个问题。您的Datacontext有陈旧数据,因为它不知道您的SP做了什么。
如果您创建一个新的DataContext并执行
var updatedUser = NEWcontext.Users.Single(u => u.id == id);
它会反映出这些变化。
答案 1 :(得分:0)
在检索用户之前尝试_context.SubmitChanges();
。
答案 2 :(得分:0)
我最终编写了一个自定义方法来清除上下文的缓存。
请注意,以下代码将清除您的上下文缓存completeley
public static void ClearCache(this OneFmDataContext context)
{
context.GetType().InvokeMember(
"ClearCache",
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.InvokeMethod,
null, context, null);
}