Самостоятельно отслеживаемые объекты возвращаются без изменений в моей службе WCF - PullRequest
0 голосов
/ 14 июля 2010

Я установил небольшое n-уровневое веб-приложение, используя MVP (Model View Presenter) во внешнем интерфейсе, службу WCF на внутреннем интерфейсе, которая связывается с BLL, а за ним - DAL, который связывается сEF4.0.Все это работает довольно хорошо, я создал несколько методов Get и Add, которые все работают.Теперь я хотел создать несколько методов обновления.Поскольку я использую Self-Tracking Entities (STE) EF4.0, я подумал, что все будет хорошо, и реализация будет довольно простой.

Это не так.При изменении моих элементов в веб-интерфейсе они сохраняют статус «Без изменений» при возвращении к WCF-сервису.Поскольку объект не изменяется, в базе данных ничего не обновляется.В связи с этим вопросом о SO: EF 4 Self Tracking Entities не работает должным образом Я натолкнулся на статью, рассказывающую более подробно о реализации STE в n-уровневом приложении.(http://msdn.microsoft.com/en-us/magazine/ee335715.aspx) Я цитирую:

Убедитесь, что повторно используете сгенерированный код сущности шаблона Self-Tracking Entity на своем клиенте. Если вы используете прокси-код, сгенерированный AddСправочник по сервисам в Visual Studio или каком-либо другом инструменте, по большей части выглядит правильно, но вы обнаружите, что сущности на самом деле не отслеживают свои изменения на клиенте.

Ну, яМне удалось создать клиента для службы с помощью этого кода:

var svc = new ChannelFactory<INorthwindSTEService>(
    "INorthwindSTEService")
    .CreateChannel();

Это выглядит вполне нормально. Дело в том, как получить сериализованные сущности на клиенте? В примере кода IЯ вижу, что писатель использует этот код:

var products = new List<Product>(svc.GetProducts());
var customer = svc.GetCustomer("ALFKI");

Но я не вижу, где определены эти объекты / сущности / ??? (я говорю о Customer и Product )

Я проверил его с помощью сущностей, которые были созданы с использованием Add Service Reference , но это, похоже, не работает.имеют статус без изменений .

Я бы предпочел не ссылаться на сущности EF в моем внешнем интерфейсе, потому что я хотел бы хранить их отдельно и иметь только сериализованные объекты на моем внешнем интерфейсе.Хотя, если это действительно необходимо, я мог бы просто сделать это.

О, использование метода MarkAsModified() для объекта-сущности работает хорошо, но это скорее хак, поскольку объект должен проверятьего статус сам по себе.

Любой совет, как поступить?Я предполагаю, что использование метода MarkAsModiefied() или обращение к проекту моделей сущностей в моем веб-приложении может быть эффективным обходным путем, но если есть что-то лучшее, я хотел бы попробовать это в первую очередь.

1 Ответ

0 голосов
/ 18 января 2011

Вам необходимо переместить объекты самоконтроля из проекта frameowrk entity

Если вы заглянете в файл .tt, то увидите, что существует путь к файлу .edmx, который вы должны заполнить.

Это позволит вам использовать их в проекте отдельно от структуры сущности.

затем вы можете ссылаться на этот проект из своего внешнего интерфейса и иметь доступ к объектам отслеживания, как вы ожидаете.

Что касается выполнения обновления ... ну, я смотрю сам; p (Я не хочу, чтобы они сами выводили их в разные состояния)

ты говоришь это «Убедитесь, что вы повторно используете сгенерированный код сущности шаблона Self-Tracking Entity на вашем клиенте»

и затем вы говорите, что не хотите делать это ниже.

Это ваша проблема.

...