EF4 POCO: Снимок и Самотрекинг по WCF - PullRequest
12 голосов
/ 26 февраля 2010

В прошлом году я разработал сервис доступа к данным для нашего проекта, используя Entity Framework (конечно, .NET3.5) и используя книгу Джули Лерхман в качестве руководства, разработавшего отслеживание состояния объектов POCO. Мы используем WCF, а также имеем клиентов Silverlight 3. Мы переходим на .NET 4.0, и я хочу перейти на использование генерации кода, чтобы избежать потери времени разработчиков на написание классов POCO и классов перевода.

В проведенном мною исследовании, кажется, есть 3 способа отслеживания POCO состояний:

1) Изменены отслеживаемые прокси: нам это не кажется полезным, так как кажется, что это не работает при сериализации WCF.

2) На основе снимка: снимок делается, когда извлекается граф сущности POCO, сравнивается возвращенный граф от клиента с этим снимком, а различия сравниваются ... мне кажется, это хорошо.

3) Само-отслеживающиеся объекты: генератор кода генерирует логику для самостоятельного отслеживания в объектах POCO. Это кажется близким к тому, что мы делаем сейчас, за исключением того, что все это создано для нас.

Я пытаюсь выяснить, какие преимущества и недостатки есть у всех этих методов. Я предполагаю, что 1 и 2 «связаны» и что им нужен ObjectContext, из которого изначально запрашивались POCO, чтобы оставаться экземпляром, но не смогли подтвердить это. Я также не вижу причины, по которой кто-то действительно будет беспокоиться о варианте 1, учитывая, что вариант 3, кажется, делает то же самое и даже больше ...

Снимок мне кажется самым простым, но если для этого требуется, чтобы ObjectContext оставался открытым в течение длительного времени, я не уверен ...

Я всего лишь младший программист, поэтому любые советы, особенно в отношении Silverlight 3 (я думаю, варианты 2 и 3 работают с Silverlight 3, но у 2 могут быть проблемы), очень ценятся.

Ответы [ 2 ]

14 голосов
/ 27 февраля 2010

Перейдите к Варианту 3. Самостоятельно отслеживаемые объекты, для которых они и были разработаны.

«Объекты самопроверки оптимизированы для сценариев сериализации»

Этот пост дает хорошую демонстрацию.

2 голосов
/ 10 июля 2010

Другие две опции применимы только тогда, когда изменения сделаны, когда объектный текст находится вокруг. Ваш единственный вариант - STE. С STE объекты будут отслеживать свои изменения. Когда измененный объектный граф отправляется на сервер, вы можете просто воспроизвести эти изменения, как показано ниже. db.Dustomers.ApplyChanges (заказчика); db.SaveChnages ();

С STE вы можете создавать свои объекты в проекте библиотеки классов и делиться ими между клиентом WCF, клиентом silverlight, asp.net и wpf. Так что это дает вам возможность повторного использования сущностей для различных клиентов.

...