2010-07-27 2 views
2

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

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. Установить поле «IsNew» к «истинному» на объектах, которые не были в базе данных до или
  2. Установить идентификатор объекта к некоторому недопустимого числа в виде «это новый элемент».
+0

Ах, хорошая идея. Я знал, что двух петель слишком много. –

Смежные вопросы