2009-11-23 3 views
0

Мне было интересно, как люди справляются с отсутствием поддержки Enum в Entity Framework при работе с услугами WCF?Entity Framework - WCF - Enums?

Общепринятая практика заключается в том, чтобы объявить getter & setter в свойстве объекта private, а затем создать частичный класс для объекта и объявить здесь свойство enum.

Все это прекрасно и денди, но представляет проблему для служб WCF. Мне нужно определение Enum на стороне клиента и хотите, чтобы это произошло через автоматическое создание прокси. Для этого мне нужно добавить атрибут DataMember в свойство Enum в общем классе, поэтому он будет включен в процесс сериализации.
Однако, когда я вызываю метод WCF, он сериализует как свойство (int), так и (Enum), таким образом сохраняя избыточные данные и увеличивая размер сообщения. Каков наилучший способ справиться с этим и как другие люди справляются с этим сценарием?

Спасибо,

Том

ответ

3

Я согласен, что объекты EF не должны быть отправлены через WCF. Поступая таким образом, вы подвергаете слишком много деталей реализации того, что стоит за WCF-сервисом.

Чтобы ограничить объем кода, который необходимо написать, чтобы облегчить преобразование из объектов EF в DTO/POCOs, выставленные службой WCF, посмотрите на Automapper.

+0

ty, +1 для предложения Automapper – TJF

0

Мы не рассылаем объекты EF над WCF.

Мы сопоставляем объекты с объектами передачи данных (DTO) и отправляем их по WCF.

Это изменится с EF 4, где есть поддержка (Objects Plain Old CLR) ПОКО

+0

Спасибо, это имеет смысл. Продолжаете ли вы использовать DTO с EF 4 или будете ли вы реализовывать реализацию EF 4 POCO? Я просто смотрю на некоторые статьи об этом, чтобы узнать, хорошо ли это будет работать. – TJF

0

Так EF 4 не поддерживают Enum ... Давайте найти другие решения.

Предположим, у вас есть OrderStatus перечисление, если вы хотите следовать строгим правилам дизайна db, вы должны создать таблицу OrderStatus. Вы можете добавить информацию в таблицу «перечислений», такие как:

  • Value (междунар или строка)
  • Localizable описания

Тогда вы будете создавать внешний ключ в вашей таблице, ссылающийся его. Это одно решение.

Теперь другой должен заменить идентификатор состояния со сложным типом:

http://devtalk.dk/CommentView,guid,d5dccc2a-5723-49b4-97d1-bf759b7f592d.aspx

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