He buscado un tema similar a mi pregunta en Internet durante los últimos días. Finalmente recurrí a hacer esta pregunta yo mismo.Correlación de resultados del procedimiento almacenado de Entity Framework
Utilizando la metodología de primer código y EF 4.3.1 Creé una clase de contexto, clases de entidad y clases para almacenar la salida del procedimiento almacenado. La clase de contexto tiene métodos que ejecutan ciertos procedimientos almacenados usando SqlQuery<T>
.
Ejemplo:
public IEnumerable<Results> GetData(int id)
{
var parameters = new SqlParameter[] { new SqlParameter("@id", id) };
var result = this.Database.SqlQuery<Result>("Exec dbo.sproc_GetData @id", parameters);
var data= result.ToList<Result>();
return data;
}
Como estoy Trazado de mi depuración mis datos regresa, y los datos se asigna a propiedades con un nombre coincidente. Sin embargo, en el resultado hay una columna con un "/"
en el nombre (ejemplo: Info/Data
). Obviamente, no puedo nombrar una propiedad de esa manera, así que pensé que podía mapear la salida utilizando el atributo de columna ([Column("Info/Data")]
):
[Column("Info/Data")]
public string InfoData
{
get { return infoData; }
set { infoData= value; }
}
Incluso he intentado utilizar el operador pie de la letra ([Column(@"Info/Data")]
), envolviendo el texto con []
([Column("[Info/Data]")]
), y probé ambos ([Column(@"[Info/Data]")]
). Al recorrer el código, veo que se asignan propiedades con nombres de columna coincidentes, pero las propiedades con el atributo de columna se ignoran y se pasan por alto durante la asignación.
También probé con fluidez-api para cada columna de la entidad.
modelBuilder.ComplexType<Result>().Property(d => d.InfoData).HasColumnName("Info/Data");
pero que desencadena la siguiente excepción:
El lector de datos es incompatible con la especificada 'NameSpace.Result'. Un miembro del tipo, 'InfoData', no tiene una columna correspondiente en el lector de datos con el mismo nombre.
En mi proyecto NameSpace.Result
es una clase (nombre cambiado por seguridad) y InfoDatais
es la propiedad que intento trazar usando fluidez-API (la columna de SQL correspondiente tiene un/en ella; por ejemplo: información/datos) .
¿Alguien ha encontrado este problema?
Si mi problema no está claro o se ha preguntado antes, por favor hágamelo saber.
Me pregunto qué tipo de personas nombre Clases/Tablas de base de datos con "/" personaje. –
Eso hace que dos de nosotros. No escribí el proceso. Me dijeron que use los datos. Fue muy molesto ver el aliasing sucediendo. –
¿Hay alguna posibilidad de crear envoltorio SP con nombres de columna normales en el resultado? – vittore