Question

Supposons que j'ai un objet employé ayant les propriétés suivantes:

string Name { get; }
float Hours { get; }
float Wage { get; }

Je veux ajouter une propriété, salaire, ce qui équivaut à heures * salaire. Dans un objet métier ordinaire, je voudrais simplement le code qui dans la propriété, mais cela aurait probablement anéanti si la classe nécessaire à régénérer.

Y at-il un moyen standard EF pour mettre en œuvre ce sans passer par la peine de la cartographie à une entité de base de données?

Était-ce utile?

La solution

En effet. Créer un fichier séparé, par exemple, EmployeeExtension.cs .

Dans ce fichier, placez le code suivant:

public partial class Employee
{
    public decimal Salary
    {
        get { return Hours * Wage; }
    }
}

classes LINQ to SQL et Entity Framework sont générés avec partiel mot-clé pour vous permettre de diviser la définition sur plusieurs fichiers, parce que les concepteurs savaient que vous voulez ajouter des membres à la classe qui aren « t écrasé par autogenerating continuellement le fichier source de base.

Autres conseils

Si je me souviens bien des classes créées par l'EF sont partielles. Ainsi, vous pouvez éventuellement ajouter un autre fichier contenant une autre classe partielle (même espace de nom, même classname bien sûr) qui met en œuvre que la propriété

public single Salary
{
   get
   {
       return this.Hours * this.Wage;
   }
}

devrait faire l'affaire (si ces célibataires ne sont pas annulable, vous l'esprit!)

Je n'étais pas en mesure d'obtenir « la réponse de Argo à travailler au départ. Après un petit jeu autour, je remarque que si je décore la propriété (comme dans WCF), que l'attribut suivant, tout a bien fonctionné.

[global::System.Runtime.Serialization.DataMemberAttribute()]

Selon « instructions Argo créer un fichier séparé, (par exemple EmployeeExtension.cs). cela devrait être marqué partielle comme décrit.

Dans ce fichier, placez le code suivant:

public partial class Employee 
{
   [global::System.Runtime.Serialization.DataMemberAttribute()]       
   public decimal Salary     
   { 
      get { return Hours*Wage; } 
   } 
}  

Hope this helps ....

Vous pouvez implémenter la propriété dans la classe d'entité. Le cadre de l'entité va générer des classes partielles vous permettant d'ajouter des membres à la classe. Ajouter une classe comme celui-ci à votre code:

public partial class Employee {
  public Single Salary {
    get { return Hours*Wage; }
  }
}

Ce ne fonctionnait pas pour moi avec Entity Framework 5. La solution pour moi était d'utiliser simplement l'attribut [NotMapped]. Pour plus d'informations voir premier code DataAnnotations

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top