У нас есть типичная многоуровневая архитектура.Приложение + Служба WCF + Репозиторий / EF4 / База данных.
Мы используем настраиваемую версию шаблона EF POCO T4 для создания наших объектов, которые мы используем на всех уровнях / уровнях.Мы решили не использовать DTO из-за дополнительного времени / работы.
Примером объекта может быть лес, который может иметь навигационные свойства деревьев, которые могут иметь навигационные свойства листьев.
Каков наилучший подход для добавления листьев и работы с графом объектов?Данные импортируются со стороны клиента, поэтому мы не обязательно знаем, существует ли родительский лес / дерево в базе данных.
Служба запросов и получение любых существующих связанных объектов.Прикрепите график для связанных объектов или создайте новые объекты и прикрепите график на стороне клиента.пример: public Forest GetForest (string forestid) затем --- public void AddLeaf (Leaf leaf)
Создайте объекты леса, дерева и листа на стороне клиента и прикрепите графики.Отправьте конечный объект и затем на стороне сервера выполните логику, чтобы сравнить объекты с существующими объектами в базе данных.При необходимости удалите графики, добавьте несуществующие элементы и / или прикрепите к существующим объектам.пример: public void AddLeaf (Leaf leaf)
Создайте объекты леса, дерева и листьев на стороне клиента, но не прикрепляйте графики.Отправьте объекты поперек, а затем на стороне службы выполните логику для сравнения объектов с существующими объектами в базе данных.Добавить элементы, которые не существуют и / или прикрепить к существующим объектам.пример: public void AddLeaf (Листовой лист, Дерево, Лесной лес)
Вопрос сводится к тому, где должна иметь место логика для прикрепления графиков этих связанных объектов.Кстати, меня немного беспокоит логика «исправления» свойств навигации при работе с сериализованными и десериализованными графами.Похоже, это может стать дорогостоящей операцией.
Примечание. Клиентское приложение - это служба Windows, которая импортирует данные ... так что это не обязательно легкий клиент.(Мы не обязательно боимся добавлять в него логику.)