No haga caso de sólo lectura propiedades de la clase cuando se utiliza DataContext.ExecuteQuery

StackOverflow https://stackoverflow.com/questions/707706

Pregunta

¿Cómo le digo un contexto de datos LINQ ignorar cualquiera de propiedades específicas, o todas las propiedades de sólo lectura, cuando se enlaza un conjunto de resultados a un objeto?

Estoy trabajando con algunas declaraciones de T-SQL que son difíciles de expresar usando LINQ, así que estoy usando el método ExecuteQuery del contexto de datos para pasar la recta T-SQL para la base de datos.

Si mi clase T tiene propiedades de sólo lectura, me sale excepciones en tiempo de ejecución cuando el contexto de datos intenta establecer esas propiedades y falla porque no hay ninguna propiedad colocador. ¿Cómo puedo saber el contexto de ignorar esas propiedades?

Esto es lo que estoy haciendo ahora. Funciona, pero es una mierda:

public bool IsPaidInFull {
    get { return NetTotal <= 0m; }
    set { /* needed so linq doesn't choke. Should never be set by hand */ }
}
¿Fue útil?

Solución

Ha considerado LINQ a Entidades? Puede que no sea la pena la molestia de convertir su proyecto, en función de lo avanzado que se encuentre, o la cantidad de ORM cabeza que se sienta cómodo. Sin embargo, este escenario exacto no sería un problema en LINQ a Entidades. No intenta actualizar leer sólo las propiedades en el objeto al cargarlo, ya que no se asignan de manera explícita, son simplemente propiedades de extensión.

Además, usted podría ir a la ruta / java vieja escuela mediante el uso de funciones getter en lugar de propiedades. getIsPaidInFull public bool () {return NetTotal <= 0m;}.

O bien, podría jugar un poco con la aplicación de las propiedades de sólo lectura en una clase hija hereda, pero que pueden introducir todo tipo de problemas de tipo.

Otros consejos

public bool IsPaidInFull
{
    get { return NetTotal <= 0m; }
    private set { ;}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top