Linq to SQL: обновление сводного корня - PullRequest
2 голосов
/ 27 июля 2010

У меня есть объект с вложенными частями в трех таблицах. Классы POCO с IList <> для отношений. Никаких связей с какими-либо рамками.

A_object-> B_object[N]-> C_object[N]

Я отправляю этот объект в хранилище для обновления. Хранилище сохраняет содержимое, используя Linq to SQL.

myRepo.Update(A_object);

Первый цикл, который обрабатывает обновления и удаления:

foreach (var B in A.B_records) 
{    foreach (var C in B.C_records) 
     {
         if( C is in our parameter object)
             // update the database object
         else
             // not found, delete the database object
     }

     if( B is in our parameter object)
         // update the database object
     else
         // not found, delete the database object
}

Цикл обновляет запись базы данных, если она найдена в нашем объекте параметра, или удаляет запись базы данных, если она не найдена в нашем объекте параметра. Таким образом, обновления и удаления работают нормально.

Учитывая, что я не могу изменить класс объекта параметра, ** есть ли какой-нибудь шаблон или механизм, который я мог бы реализовать, чтобы вставить отсутствующие объекты B и C без повторного запроса базы данных?

Очевидно, я мог бы создать массив для найденных первичных ключей B и C, а затем пропустить их в цикле вставки, но есть ли лучший способ, которого мне не хватает?

1 Ответ

1 голос
/ 27 июля 2010

У нас похожая картина, где я работаю.Обычно мы делаем одно из двух:

  1. Установите для поля «IsNew» значение «true» для объектов, которых раньше не было в базе данных, или
  2. Установите идентификатор объектана недопустимый номер в виде флага «это новый элемент».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...