Relaciones de muchos a muchos en EF7: selección de consulta para una lista que incluye datos relacionados

asp.net-core asp.net-core-mvc c# entity-framework entity-framework-core

Pregunta

Estoy creando un blog con la siguiente relación de muchos a muchos en las tablas de categorías de contenido ->. He usado el siguiente código para generar las tablas en EF7:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Categorization> Categorization { get; set; }
}

public class Categorization
{
    public int ContentId { get; set; }
    public Content Content { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Content
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string Body { get; set; }

    ...

    public virtual ICollection<Categorization> Categorization { get; set; }
}

Sin embargo, cuando intento cargar una lista de categorías, incluido el contenido asociado con una consulta EF7 de la siguiente manera, obtengo un error.

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Categorization> Categorization { get; set; }
}

public class Categorization
{
    public int ContentId { get; set; }
    public Content Content { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Content
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string Body { get; set; }

    ...

    public virtual ICollection<Categorization> Categorization { get; set; }
}

Esta es la página de error que recibo cuando se llama.

Falló una operación de la base de datos al procesar la solicitud.

AggregateException: Se han producido uno o más errores. AggregateException: Se han producido uno o más errores. AggregateException: Se han producido uno o más errores. AggregateException: Se han producido uno o más errores. SqlException: nombre de columna no válido 'Id'. Hay cambios de modelo pendientes para ApplicationDbContext Scaffold una nueva migración para estos cambios y aplicarlos a la base de datos desde la línea de comando:

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Categorization> Categorization { get; set; }
}

public class Categorization
{
    public int ContentId { get; set; }
    public Content Content { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Content
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string Body { get; set; }

    ...

    public virtual ICollection<Categorization> Categorization { get; set; }
}

Nota interesante: cuando quito la linea

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Categorization> Categorization { get; set; }
}

public class Categorization
{
    public int ContentId { get; set; }
    public Content Content { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Content
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
    public string Excerpt { get; set; }
    public string Body { get; set; }

    ...

    public virtual ICollection<Categorization> Categorization { get; set; }
}

Algunas veces funcionará correctamente, como en la carga de la categorización, sin embargo esto NO SIEMPRE sucede, a veces la categorización no se carga y solo tengo referencias nulas para la categorización en cada clase de Categoría en el enumerable generado.

Respuesta popular

El mensaje de error lo dice todo. SqlException: nombre de columna no válido 'Id'

Su base de datos es diferente a los modelos en su proyecto. Si tiene habilitada la migración de la base de datos, ejecute los comandos

dnx ef migrations add [migration name] 
dnx ef database update

Si no desea utilizar la migración de la base de datos, debe actualizar los modelos en su base de datos para que coincidan con sus modelos.




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é