2011-10-17 4 views
1

J'ai des tables de base de données importées dans le fichier .edmx et parmi les autres que j'ai une entité Customer comme:Entity Framework 4: Comment étendre une entité?

CustID 
CustName 
CustAddress 

Maintenant, je veux permettre à l'utilisateur d'éditer les clients sélectionnés et je dois montrer le nombre de commandes chaque le client a, donc en montrant le formulaire d'édition j'ai besoin d'ajouter dynamiquement un champ à cette entité - le champ CustOrderCount qui évaluera une instruction sql SELECT COUNT(*) FROM Orders WHERE CustomerID = {id}.

Y at-il un moyen d'étendre l'entité en quelque sorte de sorte que le nombre de commandes est sélectionné par EF sans faire manuellement une coutume sélectionner comme ceci:

.Select(c => new CustomerExtended 
{ 
    CustID = c.CustID, 
    ... 
    CustOrderCount = db.Orders.Where(o => o.OrderCustID = c.CustID).Count() 
} 

Répondre

2

Dans le projet où votre fichier edmx en direct, créez un nouvelle partialclass:

public partial class Customer {} 

Vous pouvez ajouter vos propres propriétés/méthodes pour l'entité EF:

No. Entité récupère à partir de la base de données uniquement les champs qui se trouvent dans la table elle-même.
public partial class Customer { 
    public int GetSomething(){} 
} 
1

Pour ce faire, vous devez effectuer une projection comme vous l'avez montré, utiliser la récupération de données personnalisée comme l'a montré @Jason.

La projection sur le modèle de vue personnalisée est la solution correcte dans ce cas car vous souhaitez afficher des données supplémentaires qui ne font pas partie de votre entité.

0

Vous pouvez créer une vue dans votre base de données, la mapper en tant que votre entité et utiliser des déclencheurs pour gérer les opérations CRUD.

+0

Une idée intéressante. –

Questions connexes