Способы обновления наборов связанных объектов в глобальных статических объектах данных контекста данных - PullRequest
1 голос
/ 11 апреля 2011

Любой, кто использовал 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); однако это, кажется, возвращает всю таблицу, которая часто крайне неэффективна. Есть идеи?

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