Нужна помощь в организации работы с данными.
Сабжект: десктопное приложение для гостиницы.
В таблице Reservations данные по каждому размещению. Каждое размещение может состоять из одного или нескольких дней (ResDays). На каждый день размещения может быть добавлена доп. услуга (AddServices).
В программе для этого я использую коллекции. Очень упрощенно:
class AddServiceItem
{
string Name;
Decimal Cost;
}
class ResDayItem
{
DateTime Date;
Decimal Cost;
Collection<AddServiceItem> AddServices;
}
class Reservation
{
DateTime StartDate;
DateTime StartDate;
int Status;
Collection<ResDayItem> ResDays;
}
С созданием размещения проблем нет - пользователь выбирает количество дней, создается экземпляр Reservation, а коллекции из дней и доп. услуг заполняются юзером в интерфейсе программы. После нажатия кнопки "Добавить размещение" все записывается в БД.
Конечно, нужно иметь возможность изменять все данные. При открытии размещения для редактирования, я опять создаю экземпляр Reservation, а коллекции заполняю значениями из БД примерно так
MyReservation = new Reservation();
//создаю коллекцию дней
MyReservation.ResDays = new Collection<ResDayItem>();
//и для каждого дня размещения с Id == resId
foreach (var Day in db.Table<ResDays>().Where(x => x.ResId == resId))
{ //создаю экземпляр ResDayItem
ResDayItem DayItem = new ReservationDayItem();
//и в нем коллекцию доп. услуг
DayItem.AddServices = new Collection<AddServItem>();
foreach (var AddService in db.Table<AddServices>().Where(x => x.ResDayId == Day.Id))
DayItem.AddServices.Add(AddService);
MyReservation.ResDays.Add(DayItem);
}
Вопрос в следующем: как (в каком порядке) делать апдейт БД при изменении коллекций?
Хотелось бы, чтобы в БД все писалось при нажатии пользователем кнопки "Сохранить". Если количество дней/доп.услуг осталось прежним, то это просто update по всем записям, а если юзер удалил что-то? Как узнать, какие именно элементы коллекций были удалены, чтобы удалить соответствующие записи из БД?
Может быть я вообще применил неверный подход с такой вложенностью коллекций?
Как правильно организовать работу с данными в такой задаче?