2010-08-23 8 views
2

Je crée une application Silverlight 4 avec les services WCF RIA. Sur le côté serveur (le projet *.Web), j'ai un modèle d'entité qui est généré automatiquement à partir d'une base de données SQL Server. Du côté client, j'ai le service de domaine et les objets proxy générés par Visual Studio pour une utilisation dans les assemblys Silverlight.Affichage des propriétés Entity Framework côté serveur personnalisées côté client

Je souhaite ajouter des propriétés personnalisées au modèle (de préférence côté serveur). Disons que j'ai Contact, Company, et Address tables, qui sont liés par des clés étrangères (mais pas nécessairement réelle clé étrangère contraintes). Je souhaite ajouter une propriété qui renverra un objet Company de ContactAddress.

J'ai tenté de le faire en créant une classe partielle pour étendre la classe Contact et en ajoutant une propriété CompanyAddress { get; }. Mais je n'ai aucune idée de ce que je dois faire avec la nouvelle propriété afin de la propager au code généré automatiquement du côté client. Y a-t-il des attributs spécifiques que je dois ajouter à la propriété? Dois-je l'enregistrer quelque part pour que le générateur de code le sache?

Est-ce que cela doit être une propriété de navigation ou peut-il être quelque chose de plus simple?

Et est-ce la meilleure façon de faire les choses, ou devrais-je abandonner l'extension du modèle côté serveur et le faire du côté client? (Si je le fais du côté client, je suis confronté au problème de ne pas avoir accès à l'objet contexte dans les classes individuelles Entity)

Répondre

-1

Je n'ai jamais utilisé les services Silverlight ou RIA mais je suppose que ce sera assez similaire. Lorsque vous créez un modèle EF et que vous avez des entités liées par une clé étrangère (il doit y avoir une relation), chaque entité liée à l'autre entité contiendra quelque chose appelée propriété de navigation. Ainsi, dans votre scénario, Contact doit contenir une propriété nommée Company et Company doit contenir une propriété appelée Address. Vous pouvez forcer EF à charger ces propriétés de navigation en utilisant Include sur ObjectSet ou par chargement paresseux (pas une bonne idée dans WCF). Que si vous envoyez un Contact par WCF au client, la Société et l'Adresse seront également envoyées.

Votre approche a un gros problème. Votre propriété contient seulement getter - cette propriété n'est pas sérialisée.

+0

Je n'ai actuellement pas la possibilité de modifier le schéma de base de données existant, donc je ne peux pas dépendre des relations de clés étrangères existant déjà dans le fichier .edmx généré. Je ne dois pas non plus modifier manuellement le fichier .edmx, car le schéma * peut * changer dans le futur, et mes modifications seront écrasées lorsque nous régénérerons le fichier edmx. – kpozin

+0

Puis ajoutez setter à votre propriété et vérifiez si la classe d'entité générée est marquée avec l'attribut DataContract. Si oui, marquez votre propriété avec l'attribut DataMember. –

+0

Nous vous remercions de votre aide jusqu'à présent. J'ai ajouté un setter et marqué la propriété avec [DataMember]. Cela n'a aucun effet. la propriété n'est pas ajoutée à la classe de proxy Contact dans Generated_Code \\ *. Web.g.cs – kpozin

Questions connexes