Se produjo la excepción System.InvalidCastException en EntityFramework.Core.dll

asp.net-core entity-framework-core linq-to-entities

Pregunta

La siguiente es la Application Entity la Application Entity :

public class Application
{
    [Key]
    [Column(TypeName = "integer")]
    public int ApplicationID { get; set; }

    [Required]
    [Column(TypeName = "nvarchar(50)")]
    public string ApplicationName { get; set; }

    [Column(TypeName = "nvarchar(150)")]
    public string Description { get; set; }

    [Required]
    [ForeignKey("mTechnology")]
    [Column(TypeName = "integer")]
    public int TechnologyID { get; set; }

    [Required]
    [Column(TypeName = "int")]
    public string CreatedBy { get; set; }

    [Required]
    [Column(TypeName = "datetime")]
    public DateTime CreatedDate { get; set; }

    public virtual mTechnology Technology { get; set; }
}

Al ejecutar la siguiente consulta LINQ, recibo un error en run-time en el foreach loop

public class Application
{
    [Key]
    [Column(TypeName = "integer")]
    public int ApplicationID { get; set; }

    [Required]
    [Column(TypeName = "nvarchar(50)")]
    public string ApplicationName { get; set; }

    [Column(TypeName = "nvarchar(150)")]
    public string Description { get; set; }

    [Required]
    [ForeignKey("mTechnology")]
    [Column(TypeName = "integer")]
    public int TechnologyID { get; set; }

    [Required]
    [Column(TypeName = "int")]
    public string CreatedBy { get; set; }

    [Required]
    [Column(TypeName = "datetime")]
    public DateTime CreatedDate { get; set; }

    public virtual mTechnology Technology { get; set; }
}

El siguiente es el mensaje de error:

Se produjo una excepción de tipo 'System.InvalidCastException' en EntityFramework.Core.dll pero no se manejó en el código de usuario

Información adicional: No se puede convertir el objeto de tipo 'System.Int32' para escribir 'System.String'.

¿Es errónea la consulta LINQ o algún otro error?

Respuesta aceptada

Por el aspecto de las cosas que has cometido un error en tu modelo.

Está intentando usar un tipo de datos no válido cuando define su clave externa TechnologyID como un entero. Sin saber qué tipo de base de datos está utilizando, asumo que está usando un servidor sql de algún tipo, en cuyo caso el tipo de datos "entero" no existe.

A continuación se debe resolver el problema:

public class Application
{
    [Key]
    [Column]
    public int ApplicationID { get; set; }

    [Required]
    [Column(TypeName = "nvarchar(50)")]
    public string ApplicationName { get; set; }

    [Column(TypeName = "nvarchar(150)")]
    public string Description { get; set; }

    [Required]
    [ForeignKey("mTechnology")]
    [Column]
    public int TechnologyID { get; set; }

    [Required]
    [Column(TypeName = "int")]
    public string CreatedBy { get; set; }

    [Required]
    [Column]
    public DateTime CreatedDate { get; set; }

    public virtual mTechnology Technology { get; set; }
}

Como nota al margen, no siempre necesita especificar el nombre de tipo para todas sus propiedades. Si tiene una propiedad int y la está asignando a una columna int, solo puede usar el atributo [Columna] y EF usará el tipo int correcto. Especificar el nombre del tipo es más importante cuando intenta usar un largo en su modelo cuando no hay mucho en el servidor sql, por lo que usaría la propiedad TypeName como [Column (TypeName = "bigint")]




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué