Обновить Linq2Sql DataContext после выполнения StoredProc - PullRequest
0 голосов
/ 03 марта 2011

Я выполняю хранимую процедуру, используя 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 ]

3 голосов
/ 03 марта 2011

Я тоже с этим боролся.Ваш Datacontext имеет устаревшие данные, потому что он не знает, что сделал ваш SP.

Если вы создадите новый DataContext и выполните

var updatedUser = NEWcontext.Users.Single(u => u.id == id); 

, это отразит изменения.

0 голосов
/ 29 июня 2012

В итоге я написал собственный метод для очистки кеша контекста.

Обратите внимание, что приведенный ниже код полностью очистит кеш вашего контекста

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);
    }
0 голосов
/ 03 марта 2011

Попробуйте _context.SubmitChanges(); перед извлечением пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...