Любой, кто использовал LINQ to SQL в течение любого промежутка времени, будет знать, что использование глобального статического контекста данных может представлять проблемы с синхронизацией между базами данных (особенно если используется многими одновременными пользователями). Для простоты мне нравится работать с объектами непосредственно в памяти, манипулировать ими, а затем выдвигать контекст. SubmitChanges (), когда обновления и вставки в этот объект и связанные с ним аналоги завершены. Я знаю, что это не рекомендуется, но оно также имеет свои преимущества. Проблема здесь заключается в том, что любые прикрепленные связанные объекты не обновляются с этим, и также невозможно обновить коллекцию context.Refresh (linqobject.linkedcollection), поскольку это не учитывает вновь добавленные и удаленные объекты.
Мой вопрос: я пропустил что-то очевидное? Кажется безумием, что нет простого способа обновить эти коллекции без создания определенной логики.
Я также хотел бы предложить обходной путь, который я обнаружил, но мне интересно знать, есть ли недостатки этого подхода (я не профилировал вывод и обеспокоен тем, что он может генерировать непреднамеренные операторы вставки и удаления) .
foreach (OObject O in Program.BaseObject.OObjects.OrderBy(o => o.ID))
{
Program.DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, O);
Program.DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, O.LinksTable);
O.LinksTable.Assign(Program.DB.LinksTable.Where(q => q.OObject == O));}
Также возможно сделать что-то вроде Program.DB.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Program.DB.OObjects);
однако это, кажется, возвращает всю таблицу, которая часто крайне неэффективна. Есть идеи?