执行StoredProc后更新Linq2Sql DataContext

时间:2011-03-03 11:42:14

标签: c# linq-to-sql stored-procedures

我正在使用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(.......);,但我根本无法刷新上下文。

任何帮助都将不胜感激。

3 个答案:

答案 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);
    }