Предоставление пользовательских серверных свойств Entity Framework на стороне клиента. - PullRequest
2 голосов
/ 23 августа 2010

Я делаю приложение Silverlight 4 с WCF RIA Services.

На стороне сервера (проект *.Web) у меня есть Entity Model, которая автоматически генерируется из базы данных SQL Server.На стороне клиента у меня есть доменная служба и прокси-объекты, которые создаются Visual Studio для использования в сборках Silverlight.

Я хочу добавить пользовательские свойства в модель (желательно на стороне сервера).Скажем, у меня есть таблицы Contact, Company и Address, которые связаны внешними ключами (но не обязательно фактическим внешним ключом ограничений ).Я хочу добавить свойство, которое будет возвращать объект Contact Company Address.

Я пытался сделать это, создав частичный класс для расширения класса Contactи добавив свойство CompanyAddress { get; }.Но я понятия не имею, что мне нужно делать с новым свойством, чтобы оно распространялось на автоматически сгенерированный код на стороне клиента.Есть ли конкретные атрибуты, которые я должен добавить к свойству?Нужно ли регистрировать его где-нибудь, чтобы генератор кода знал об этом?

Должно ли это быть свойство навигации или что-то более простое?

И это даже лучшеспособ сделать что-то, или я должен отказаться от расширения серверной модели и просто сделать это на стороне клиента?(Если я делаю это на стороне клиента, я сталкиваюсь с проблемой отсутствия доступа к объекту контекста внутри отдельных Entity -приобретенных классов.)

1 Ответ

0 голосов
/ 24 августа 2010

Я никогда не пользовался услугами Silverlight или RIA, но, думаю, это будет очень похоже.Когда вы создаете модель EF и у вас есть сущности, связанные внешним ключом (должна быть связь), каждая сущность, связанная с другой сущностью, будет содержать нечто, называемое свойством навигации.Таким образом, в вашем сценарии Contact должен содержать свойство с именем Company, а Company должно содержать свойство с именем Address.Вы можете isntruct EF для загрузки этих свойств навигации с помощью Include on ObjectSet или отложенной загрузки (не очень хорошая идея в WCF).Чем, если вы отправите Контакт через WCF клиенту, Компания и Адрес также будут отправлены.

У вашего подхода есть одна большая проблема.Ваша собственность содержит только геттер - такая собственность не сериализована.

...