I depurado este problema en WinDbg y es causada por el Microsoft.VisualStudio.Web.Mvc.Scaffolding.BuiltIn.EntityFrameworkServices
siguiente método:
internal static bool IsValidContextType(Type contextType)
{
return (typeof(ObjectContext).IsAssignableFrom(contextType) || ((contextType.BaseType != null) && contextType.BaseType.FullName.Equals("System.Data.Entity.DbContext", StringComparison.OrdinalIgnoreCase)));
}
Este método se vuelve falsa porque se está pasando el tipo incorrecto. No estoy seguro de dónde vienen, pero hay varias DLL cargadas dentro de VS que contienen implementaciones del tipo de contexto, pero solo una de ellas se deriva de DbContext, todas las demás se derivan de System.Object. Estos ensamblados de tipos falsos están en mi directorio '% localappdata% \ assembly', por lo que han sido autogenerados por alguna herramienta y cargados en VS.
El error se debe al hecho de que Microsoft.VisualStudio.Web.Mvc.Util.TypeHelper.GetType
solo filtra por Type.FullName. para encontrar el Tipo correcto también es necesario filtrar por IsValidContextType()
.
Ok, algo realmente extraño está sucediendo. Tengo 2 clases parciales para mi clase derivada de DbContext (la mayor parte es autogenerada por una secuencia de comandos .tt, y una parte está hecha a mano). cuando trato de agregar un controlador, VS agrega nuevas propiedades a mi clase parcial, luego construye esa parte de la clase parcial (solo la parte manual, y no usa la clase base). luego carga la DLL que creó de la mitad de la clase de modelo en la memoria, luego falla la comprobación de la clase base anterior.
raro.
línea inferior: intente eliminar las clases parciales del contexto de su modelo, si tiene una.
estaba recibiendo el mismo problema. Por alguna razón, el contexto de datos autogenerados es el incorrecto ... todo el tiempo. –