2012-09-24 12 views
5

Estoy usando EF4, primero el código. Como tal, mis clases de modelo tienen una combinación de propiedades públicas, algunas propiedades virtuales (para datos cargados perezosos de otras tablas) y algunas propiedades que se fijan con los atributos [NotMapped] para que sean omitidas por EF.obteniendo la consulta de Entity Framework para respetar los atributos

A veces me gusta utilizar la consulta sin formato: c.Database.SqlQuery<T>("select ...") para utilizar EF como mapeador de filas.

Noté en Intellitrace que estas consultas generaban muchas excepciones lanzadas y atrapadas para "IndexOutOfRange". Después de algunas búsquedas, las excepciones son todas para las propiedades virtuales y [No modificadas] en el objeto modelo. No quiero tener que construir una nueva clase de modelo de datos o clase principal con solo las propiedades de la tabla; ¿Hay algún paso de configuración que me haya olvidado para decirle al mapeador de filas en el corredor de consultas sin procesar que preste atención a las mismas anotaciones que usa el resto de EF? Tal vez arreglaron esto en EF5?

Respuesta

1

Si ejecuta dbContext.Database.SqlQuery EF nunca usará la asignación. Utilizará una coincidencia simple de nombres de propiedad y columnas en el conjunto de resultados. Intente usar dbSet.SqlQuery en su lugar. Debe reflejar el mapeo porque puede cargar datos como entidades adjuntas.

+0

Sabía que el dbSet funcionaba; por diversas razones, no tengo un dbSet en el que me interese utilizar Database.SqlQuery. Entonces suena como "nunca" es la respuesta. – Mikeb

+0

Sí, hay una gran diferencia entre esas dos llamadas, pero no veo una razón por la que no deba tener 'DbSet'. Usted tiene un contexto y conoce un tipo para llamar a 'dbContext.Set () .SqlQuery (....)' debería ser posible. –

+0

Iba a intentar eso para ver si era más rápido o no, y recordé por qué no hice eso: "El tipo de entidad (T) no es parte del modelo para el contexto actual". – Mikeb

Cuestiones relacionadas