LINQ-TO-SQL Refresh () не обновляет ассоциации объектов после некоторого внешнего обновления базы данных, такого как ExecuteCommand () - PullRequest
7 голосов
/ 22 июля 2011

Допустим, у меня есть объект с именем Department, который я извлек из MyDataContext. Департамент имеет ассоциацию под названием «Сотрудники».

Я хочу добавить группу новых сотрудников в отдел. Вместо использования LINQ, что приведет к нескольким запросам, я делаю одну массовую вставку с:

MyDataContext.ExcecuteCommand(
"Insert INTO Employee (DeptID, etc…), (DeptID, etc…), (DeptID, etc…)"
);

Теперь мой объект Department ничего не знает об этих изменениях, в частности свойство Employees, потому что Department.Employees.Count () возвращает 0

Я попытался выполнить оба следующих действия, чтобы выполнить обновление для обновления Департамента и связанных с ним сотрудников:

MyDataContext.Refresh(RefreshMode.OverwriteCurrentValues, Department);
MyDataContext.Refresh(RefreshMode.OverwriteCurrentValues, Department.Employees);

Но все равно Department.Employees.Count () возвращает 0

Я знаю, что данные действительно были добавлены правильно, потому что, если я создаю новый DataContext и получаю сущность Department, Department.Employees.Count () = 3

Как я могу обновить MyDataContext или мою существующую сущность Department без использования нового DataContext?

(я использую один DataContext во всем запросе и выполняю несколько различных манипуляций с ним, поэтому было бы трудно попытаться ввести другой DataContext)

1 Ответ

7 голосов
/ 22 июля 2011

К сожалению, согласно этой записи , Refresh () не будет перезагружать ассоциации.Предложенный обходной путь:

Department.Employees.Clear();
Department.Employees.AddRange(MyContext.Employees.Where(x=>x.DeptID=Department.DeptID))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...