2010-08-23 1 views
2

Я делаю приложение Silverlight 4 с услугами службы WCF RIA.Выявление пользовательских свойств Entity Framework на стороне сервера на стороне клиента

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

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

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

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

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

ответ

-1

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

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

+0

В настоящее время у меня нет возможности изменять существующую схему базы данных, поэтому я не могу зависеть от отношений внешнего ключа, уже существующих в сгенерированном файле .edmx. Я также не должен вручную модифицировать файл .edmx, так как схема * может * измениться в будущем, и мои модификации будут перезаписаны при восстановлении файла edmx. – kpozin

+0

Затем добавьте сеттер к свойству и проверьте, отмечен ли класс сгенерированной сущностью с атрибутом DataContract. Если да, отметьте свою собственность атрибутом DataMember. –

+0

Благодарим вас за помощь. Я добавил сеттера и отметил свойство с помощью [DataMember]. Это не имеет никакого эффекта; свойство не добавляется в класс прокси-сервера Contact в Generated_Code \\ *. Web.g.cs – kpozin