C# .Net EF 6.1 Utilizar la clase base de objetos como tipo de propiedad no mapea un objeto de la base de datos.
“Tengo un objeto Resultado que uso para mapear una consulta utilizada en varias tablas:
public class Resultado
{
public int Id{ get; set; }
//El valor puede ser bool, int, string, date
public object Valor { get; set; }
}
Llamadas a EF:
results.AddRange(context.Database.SqlQuery
results.AddRange(context.Database.SqlQuery
La propiedad Id se llena, pero el Valor permanece nulo. ¿Hay alguna manera de llenar la propiedad Valor?”
davy.ai
Sí, hay una manera de poblar la propiedad Value. Dado que la propiedad Value puede tener diferentes tipos de datos (bool, int, string, date), necesitamos convertir explícitamente el valor devuelto por la consulta SQL al tipo de dato correcto. Podemos usar la propiedad Type del objeto Result para determinar el tipo de dato de la propiedad Value y luego utilizar el método de conversión apropiado.
Aquí tienes un ejemplo de cómo poblar la propiedad Value para un entero:
Esta consulta SQL utiliza la función CAST para convertir la columna Value a un entero. De manera similar, podemos utilizar la función CONVERT para convertir la columna Value a un tipo de dato diferente si es necesario.
Nota que necesitamos actualizar la consulta SQL para cada tipo de dato que queremos consultar. Puede ser más eficiente utilizar una única consulta SQL que una las tablas ResultStrings y ResultInt y que incluya las conversiones adecuadas. Por ejemplo:
Esta consulta utiliza un join con una tabla DataTypes para determinar el tipo de dato de la columna Value y también incluye una declaración CASE para realizar la conversión adecuada. La ventaja de utilizar una única consulta es que solo necesitamos llamar a la base de datos una vez, lo cual puede mejorar el rendimiento.