Pregunta

Supongamos que tengo un objeto Employee con las siguientes propiedades:

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

Quiero añadir una propiedad, el salario, lo que equivale a horas * salariales. En un objeto normal de la empresa, me basta con codificar que en la propiedad, pero esto sería presumiblemente eliminada si la clase necesaria para ser regenerado.

¿Hay una manera estándar de EF para implementar esto sin pasar por la molestia de la cartografía a una entidad de base de datos?

¿Fue útil?

Solución

En efecto. Crear un archivo separado, por ejemplo, EmployeeExtension.cs .

En este archivo, coloque el código siguiente:

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

LINQ a clases SQL y Entity Framework se genera con la parcial palabra clave que le permite dividir la definición lo largo de muchos archivos, porque los diseñadores sabían que tendrá que añadir miembros a la clase que aren 't sobrescritos por autogenerating continuamente el archivo de origen de base.

Otros consejos

Si no recuerdo mal las clases creadas por la EF son parciales. Por lo que podría posiblemente añadir otro archivo que contiene otra clase parcial (el mismo espacio de nombres, el mismo nombre de la clase, por supuesto), que pone en práctica de la propiedad

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

debe hacer el truco (si los solteros son no anulable, que importa!)

Yo no era capaz de conseguir 'la respuesta de Argo trabajar inicialmente. Después de un poco de juego alrededor me di cuenta de que si he decorado la propiedad (como en FO), que el atributo siguiente, todo funcionaba bien.

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

De acuerdo con 'las instrucciones del Argo crear un archivo separado, (por ejemplo EmployeeExtension.cs). esto debe ser marcado parcial como se describe.

En este archivo, coloque el código siguiente:

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

Espero que esto ayude ....

Puede aplicar la propiedad en la clase de entidad. El marco de la entidad generará clases parciales que le permite añadir miembros de la clase. Añadir una clase como esta a su código:

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

Esto no funcionaba para mí con Entity Framework 5. La solución para mí fue simplemente usar el atributo [NotMapped]. Para más información ver Código Primera DataAnnotations

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top