0

Disons que j'ai deux tables dans SQL que je veux avoir un modèle EDMX généré à partir (pour l'instant, d'aller avec la génération automagique pour tout) en utilisant des modèles POCO T4. Disons que nos deux tables sont Person (ID, FName, LName) et Comment (ID, PersonID, CommentText, CommentDate) avec une relation un-à-plusieurs entre les deux (c'est-à-dire que vous pouvez faire beaucoup de commentaires sur une personne).Ajout d'une propriété personnalisée à mon EF4 modèle

mes entités POCO Comment s'y rendre générés à partir de c'est trivial et fonctionne à merveille. Ce que je ne sais pas comment faire maintenant, cependant, est d'ajouter une propriété de navigation personnalisée sur mon entité Person qui représente le commentaire le plus récent pour cette personne (éventuellement quelque chose d'encore plus complexe que cela sera finalement nécessaire). Pour l'instant, c'est bien que ce soit en lecture seule, mais il serait bon de savoir aussi gérer une propriété accessible en écriture.

Quelle est la bonne façon de faire cela? Une chose à considérer est que je suis en train de sérialiser ces entités, donc je vais avoir besoin d'eux pour être chargé et persister de manière à pouvoir les pousser vers mon interface utilisateur avec WCF au milieu (c'est-à-dire une propriété personnalisée manuscrite en une classe d'extension qui repose sur un chargement paresseux n'est pas une option).

Je suis devenu assez bon à l'aide EF4 pour des trucs standard, mais maintenant que je suis entrer dans ce genre de choses personnalisé, je ne suis pas tout à fait sûr comment faire cela dans une meilleure façon de pratique.

+0

Idéalement, je veux appeler 'Person.LatestComment' et cela équivaut à appeler' Person.Comments.OrderByDescending (c => c.CommentDate) .FirstOrDefault() '. – Jaxidian

Répondre

2

Ajout d'une propriété est facile. Mettez-le dans une classe partielle, nommé le même que l'entité. Mais si votre propriété ressemble à:

get 
{ 
    return this.Comments.OrderByDescending(c => c.CommentDate).FirstOrDefault(); 
} 

... alors cela fonctionnera mais vous ne pouvez pas l'utiliser dans une requête L2E.

Si vous avez besoin d'aide L2E, vous pouvez utiliser this technique.

+0

L'exemple fourni ne fonctionnera pas car j'en ai besoin pour les requêtes L2E ET pour que la valeur soit sérialisée. Je vais regarder dans votre autre technique que vous avez mentionnée. BTW, merci de m'avoir suivi et mes questions et pour toutes les réponses que vous fournissez. ;-) – Jaxidian

+0

En regardant dans l'autre solution semble assez impliqué (pas nécessairement dans la consommation, mais au moins dans la compréhension de ce qui se passe). En tant que tel, il est difficile d'avoir une idée de la façon dont cela va fonctionner. Cela fonctionnera-t-il avec un chargement enthousiaste, un chargement paresseux explicite et une sérialisation? Et n'y a-t-il pas vraiment un moyen pour moi de faire cela dans ma cartographie EDMX? Je pensais que je devais être en mesure d'avoir les correspondances « intéressantes » ont lieu là-bas pour que je puisse bénéficier de SQL optimisé des requêtes avec les applications « intéressantes » ... – Jaxidian

+0

IMHO votre entité est le bon endroit pour personnaliser la sérialisation. L'ajout de propriétés personnalisées à une entité est * différent * du mappage. Oui, vous pouvez effectuer des mappages "intéressants" dans une certaine mesure (par exemple, la division d'entités), mais les propriétés personnalisées sont entièrement différentes. –

Questions connexes