El tipo de entidad 'Microsoft.AspNet.Mvc.Rendering.SelectListGroup' requiere que se defina una clave

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

Pregunta

No estoy seguro de lo que ocurrió pero recibo el siguiente error al intentar recuperar cualquier vista en mi aplicación web. El código es generado automáticamente por Visual Studio y no recibo ningún error antes de construir. Utilizando ASP.Net MVC 6, EF7.

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

Información adicional: El tipo de entidad 'Microsoft.AspNet.Mvc.Rendering.SelectListGroup' requiere que se defina una clave.

Aquí está la línea en la que el código está saliendo.

public IActionResult Index()
{
    var schoolContext = _context.Schools
                                .Include(s => s.District)
                                .Include(s => s.Location)
                                .Include(s => s.Tier);
    return View(schoolContext.ToList());
}

Después de algunas búsquedas no puedo entender exactamente lo que necesito arreglar. Esto estaba funcionando en un punto. No estoy seguro de lo que cambió.

La vista tiene una definición

public IActionResult Index()
{
    var schoolContext = _context.Schools
                                .Include(s => s.District)
                                .Include(s => s.Location)
                                .Include(s => s.Tier);
    return View(schoolContext.ToList());
}

Como se solicita aquí es el modelo de escuela.

public IActionResult Index()
{
    var schoolContext = _context.Schools
                                .Include(s => s.District)
                                .Include(s => s.Location)
                                .Include(s => s.Tier);
    return View(schoolContext.ToList());
}

Respuesta aceptada

Estos IEnumerable<SelectListItem> s no deben formar parte de su modelo EF. Recuerda el principio de responsabilidad única . Mantenga cualquier marco UI lejos de su implementación DAL. Use un modelo de vista que represente una School .

En cuanto al error, desde el punto de vista de EF, School tiene una asociación 1-n con SelectListItem , por lo que trata de que forme parte de su esquema de mapeo. Pero cada tipo mapeado necesita una clave principal, que por supuesto no está mapeada, y EF no puede inferir ninguna.

Una solución rápida, pero sucia, sería excluir que las propiedades no sean asignadas por el atributo [NotMapped] , pero una solución mejor a su código es el verdadero remedio.




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é