Propriétés calculées dans Entity Framework

.net calculated-columns entity-framework

Question

Supposons que j'ai un objet Employee avec les propriétés suivantes:

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

Je veux ajouter une propriété, Salary, qui équivaut à Heures * Salaire. Dans un objet métier ordinaire, je coderais simplement cela dans la propriété, mais cela disparaîtrait probablement si la classe devait être régénérée.

Existe-t-il un moyen standard EF d’implémenter cela sans passer par le problème du mappage vers une entité de base de données?

Réponse acceptée

Effectivement. Créez 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; }
    }
}

Les classes LINQ to SQL et Entity Framework sont générées avec le mot clé partial pour vous permettre de fractionner la définition sur de nombreux fichiers, car les concepteurs savaient que vous souhaitiez ajouter à la classe des membres qui ne sont pas écrasés par une génération automatique en continu du fichier source. .


Réponse populaire

Si je me souviens bien, les classes créées par l’EF sont partielles. Vous pouvez donc éventuellement ajouter un autre fichier contenant une autre classe partielle (même espace de noms, même nom de classe) qui implémente la propriété

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

Devrait faire l'affaire (si ces célibataires ne sont pas nullables, remarquez!)



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow