Re[3]: EF. Концепция использования
От: HowardLovekraft  
Дата: 01.10.10 13:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Может и даже работает, но при условии что объект создан при помощи контекста, или в него добавлен

Речь шла о графе объектов, который уже передан клиенту. Там контекста нет. И lazy loading нет.
Зачем lazy loading на сервисе, при построении графа, который будет отправляться за пределы этого сервиса, я х.з.
Обычно метод сервиса, которому нужно отдать граф, четко знает, что и на какую глубину загружать. Хотя, может быть, я не сталкивался с такими сценариями.

А>Совершенно верно.

А>Ну тут мне еще self-tracking надо поковырять. Еще не добрался
А>Я тоже так думал, но сгенерированные POCO классы имеют логкику, для поддержания консистенции объектов. Так например при утановки национальности эта логика устанавливает значение FK; старый Nationality Объект теряет ссылку на персону, и в новой национальности устанавливается ссылка на персону Nationality.Person = Person. Эта логика затрагивает контекст и вызвает исключение
Использование POCO нужно для persistence ignorance.
Наличие в коде POCO какой-либо ссылки на сборки EF — это нарушение persistence ignorance, которое лишает смысла использование POCO.
Association fixup в коде POCO ("логика для поддержания консистенции объектов") — это нормально.
Association fixup в коде POCO, использующий контекст — это странно.
Я не смотрел на шаблоны, которые вы используете. Но, если они действительно генерируют fixup-код с использованием контекста, выбростье их.

А>Кстати указанный мною сценарий по установке национальности работает, но сильно смущает.

Еще бы. Ведь вы фактически выполняете руками то, что контекст должен делать автоматически.
Суть self tracking — объект хранит минимально-необходимую информацию о своих изменениях, а контекст умеет этой информацией правильно пользоваться.
Посмотрите хотя бы на те шаблоны, которые идут вместе со студией.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.