EF4: использование Add Service Reference вызывает проблемы с STE(объектами самоконтроля), не помните, есть ли изменения?
Я обнаружил проблему, но она относится к бета-версии VS 2010. Мне интересно знать, была ли эта проблема исправлена в RTM?
В основном это говорит (видел это через EF 4 Self Tracking Entities не работает должным образом)
Не забудьте повторно использовать сгенерированный код сущности шаблона Self-Tracking Entity на своем клиенте. Если вы используете прокси-код, сгенерированный Add Service Reference в Visual Studio или каком-либо другом инструменте, по большей части все выглядит правильно, но вы обнаружите, что сущности на самом деле не отслеживают свои изменения на клиенте.
Я очень привык использовать Add Service Reference, и в прошлом он всегда отлично работал для меня, но, конечно, я не использовал STE (объекты самообследования). По-прежнему ли эта проблема связана с VS 2010 RTM и шаблоном STE?
Если я создаю прокси через код вместо службы добавления, тогда все классы не будут созданы, не так ли?
Любая помощь или понимание действительно ценится
1 ответ
Это не проблема, и это никогда не было проблемой. Это абсолютно ожидаемое и правильное поведение. STE - это классы, которые содержат данные и логику (логика отслеживает изменения).
При добавлении сервисной ссылки ваш клиентский прокси-код генерируется из метаданных сервиса. Метаданные выставляются в виде WSDL. WSDL - это описание сервиса на основе XML, которое также содержит XSD-описание типов передаваемых данных. XSD может описывать только формат данных, но не связанную логику, реализованную типом. По умолчанию все неизвестные типы данных, описанные в WSDL, генерируются на клиенте. Поэтому, когда вы создаете клиентский прокси со всеми типами данных с помощью Добавить ссылку на службу, логика отслеживания теряется.
Чтобы преодолеть эту проблему, вам нужно сделать две вещи:
- Создайте отдельную сборку и поместите все ваши STE в эту сборку. Затем поделитесь этой сборкой среди всех задействованных слоев (да, вы должны использовать ссылку Add в вашем клиенте).
- Затем вы можете использовать ссылку "Добавить службу" с проверкой "Повторное использование типов в ссылочных сборках".