У меня есть текущий сценарий:Сохранение сложного отдельностоящего графа объектов в EF6
Я использую Ef6 код первый, и создали данные модели что-то вроде этого:
public class MainObject{
..some properties
IList<SubObject> SubObjects{get;set;}
}
public class SubObject{
..some properties
IList<SubSubObject> SubSubObjects{get;set;}
}
public class SubObject{
..some properties
IList<SubObject> SubObjects{get;set;}
}
Поэтому в основном я имеют основной объект, который имеет от 0 до многих подобъектов, и между подобъектом и подсубъектами существует много-много отношений.
Я создаю приложение MVC, поэтому мой обычный программный поток заключается в том, что пользователь запрашивает страницу, которая в основном использует объект MainObject, как модель данных. Затем пользователь взаимодействует со страницей и изменяет, добавляет или удаляет подобъекты и подсубъекты по своему усмотрению, а затем нажимает на сохранение. При сохранении объект-граф отправляется обратно на контроллер и выглядит корректно в соответствии с изменениями, выполненными пользователем на стороне клиента. Теперь моя проблема заключается в следующем:
Как сохранить это обратно в базу данных в хорошем состоянии.
Мне нужно привязать свой объект обратно к контексту, но я не знаю, какие объекты являются новыми, изменены или удалены.
Я написал код, который частично работает сейчас, но он становится настолько уродливым, что я действительно не хочу идти по этому пути. Можно ли каким-то образом получить соответствующий граф объектов из базы данных и сравнить EF два графика по отношению друг к другу, а затем сохранить соответствующие изменения в базе данных?
Любая помощь, чтобы сделать эту гладкость была бы весьма признательна.
Вы можете попробовать [GraphDiff] (https://github.com/refactorthis/GraphDiff). Я никогда не пробовал, но выглядит многообещающе. –
@GertArnold - На самом деле, я попробовал это прошлым вечером, и он решил мою проблему в очень хорошем состоянии. Поэтому рекомендуется. Если вы хотите сделать этот комментарий в ответ, я буду рад отметить его как принятый :) –
Не могли бы вы ответить на свой вопрос (что хорошо в StackOverflow) и кратко показать, что вы сделали? По сравнению со мной, ты сейчас эксперт! Я буду рад поддержать. –