sábado, 1 de junio de 2013

Propiedades calculadas en Code First

El otro día tuve la necesidad de crear una propiedad calculada en una entidad de Code First.
La propiedad simplemente devuelve la suma del Nombre y Apellidos de una Persona.

Para lograr “persistir” la propiedad en la base de datos y además poder utilizarla en una proyección en L2E, he optado por la siguiente solución:

public string NombreCompleto
{
    get
    {
        return Nombre + " " + Apellidos;
    }
    private set
    {
 
    }
}

Aunque podría parecer raro que el set sea privado (lo normal parecería quitarlo sin más), si no incluimos el set en la propiedad, el valor de la misma no sería guardado en la base de datos y cuando entonces quisiéramos utilizar la propiedad en una proyección de L2E no estaría disponible y lanzaría un error como el siguiente:

image

Este error es al fin y al cabo, el mismo que tendríamos si alguna propiedad no está mapeada a la base de datos (con el atributo NotMapped o con Ignore vía Fluent API) y la quisiéramos utilizar en alguna proyección desde L2E (ver que no habría problema si no hacemos una proyección de la propiedad en una consulta y utilizamos un método que materialice el objeto sin preguntar por la propiedad en concreto como podría ser Find, Single, etc.).

Un saludo!

No hay comentarios:

Publicar un comentario