2014-02-10 3 views
7

У меня есть текущий сценарий:Сохранение сложного отдельностоящего графа объектов в 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 два графика по отношению друг к другу, а затем сохранить соответствующие изменения в базе данных?

Любая помощь, чтобы сделать эту гладкость была бы весьма признательна.

+0

Вы можете попробовать [GraphDiff] (https://github.com/refactorthis/GraphDiff). Я никогда не пробовал, но выглядит многообещающе. –

+0

@GertArnold - На самом деле, я попробовал это прошлым вечером, и он решил мою проблему в очень хорошем состоянии. Поэтому рекомендуется. Если вы хотите сделать этот комментарий в ответ, я буду рад отметить его как принятый :) –

+0

Не могли бы вы ответить на свой вопрос (что хорошо в StackOverflow) и кратко показать, что вы сделали? По сравнению со мной, ты сейчас эксперт! Я буду рад поддержать. –

ответ

6

Я закончил с использованием GraphDiff, чтобы решить эту проблему для меня, и она отлично работает! Это действительно должно быть встроено в EF, но пока это не произойдет, это отличная замена.

Чтобы решить пример, приведенный в моем вопросе выше, это будет убедиться, что сторонний график будет сохранен правильно (учитывая У меня есть MainObject я хочу сохранить называется основной):

context.UpdateGraph(main, map =>map 
    .AssociatedCollection(m => m.SubObjects, with => with 
    .AssociatedCollection(s => s.SubSubObjects) 
) 
); 

context.SaveChanges(); 
+0

На самом деле у меня такая же проблема, но до сих пор я не увенчался успехом в моей реализации GraphDiff? Не могли бы вы предоставить дополнительную информацию о вашей настройке EF? Используемая версия, включена ли отслеживание изменений и т. Д.? Возможно, это может помочь в решении этой проблемы для меня. http://stackoverflow.com/questions/22098433/entity-framework-duplicates-lookup-values-when-assigned-to-nested-list-member –

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

  • Нет связанных вопросов^_^