Agregar controlador en MVC4 no funciona

Estoy usando VS 2010 Premium. Tengo un proyecto MVC4 usando SqlCe 4.0 con un modelo de marco de entidad.

El modelo es:

public class ProjectBuild { public int ProjectBuildID {get;set;} public string name {get;set;} } public class ProjectBuildContext:DbContext { public DbSet builds {get;set;} } 

A continuación está mi cadena de conexión:

  add name="ProjectBuildContext" connectionString="Data Source=|DataDirectory|DB.sdf" providerName="System.Data.SqlServerCe.4.0" 

Cuando trato de crear un nuevo controlador con el andamio incorporado también obtengo el siguiente error:

“No se pueden recuperar los metadatos para ProjectBuild”. “No se admite el uso del mismo DbCompiledModel para crear contextos con diferentes tipos de servidores de bases de datos. En su lugar, cree un DbCompiledModel por separado para cada tipo de servidor que se esté utilizando.

Probé la solución Fontanka16, pero no funcionó, resultó que a mi clase DbContext le faltaba su constructor predeterminado que definía la base de datos CE objective.

Estos son mis pasos resumen:

  • Instalado el paquete Nuget EntityFramework.SqlServerCompact.
  • Agregué el constructor predeterminado a mi clase DbContext.

    clase pública SchoolContext : DbContext {public SchoolContext (): base (” School “) {} …}

  • Mi cadena de conexión es:

      

Entonces funcionó.

Cambié el nombre de mi cadena de conexión a DefaultConnection y luego funcionó, al principio intenté agregar el constructor predeterminado pero recibí una advertencia acerca de no tener las referencias correctas de los ensamblajes.

Soy nuevo en el uso de EF y MVC, pero lo que encontré es que si no define la conexión de datos (comentarla) o la renombra en web.config, Visual Studio le permitirá agregar el controlador. Si no se define ninguna conexión, EF usará automáticamente SQLExpress. Después de agregar el controlador, puede volver a agregar la cadena de conexión a web.config y el progtwig funcionará como se esperaba.

// esta solución es un extracto de http://forums.asp.net/t/1838396.aspx/1?Error+while+adding+controller+class+Unable+to+retrieve+metadata+for+MvcMovie+Models+ Película +

Siempre debe inicializar la superclase con base(string) . También descubrió que el nombre de connectionString en Web.config puede no ser el mismo que el String que envía al contructor de superclase.

Así por ejemplo :

  public class MovieDBContext : DbContext { public MovieDBContext() : base("Movie") { } } 

"MovidDBContect" puede ver, el "MovidDBContect" es diferente de "Movie" .

  1. Crea el controlador
  2. Agregue el contexto de cadena en web.config

Es un problema cronológico, no un error. Fuente: de la comunicación de Vô Thường’s http://www.itorian.com/2012/10/unable-to-retrieve-metadata-for.html

Una nota si ayuda a alguien. acabo de tener este problema.

Esto lo solucionó: 1. Comentando la cadena de conexión 2. Reconstruye el sitio web sin la cadena de conexión 3. Agrega el controlador 4. Elimina la cadena de conexión 5. Reconstruye el sitio web

Todo funciona bien

Estaba teniendo este problema al agregar un controlador API 2.0 / MVC5 con Entity Framework 6 y una base de datos MySQL.

 [DbConfigurationType(typeof(MySqlEFConfiguration))] 

Comenta este atributo de clase. Desarrollar proyecto Luego, agregar un controlador funciona para mí en MySql.

Quite el comentario después de agregar el controlador y continúe de forma normal.

Esto va a parecer algo tonto, pero ¿tiene alguna conexión hecha a su base de datos en otra parte? Me encontré con este mismo problema exacto. Tenía la base de datos abierta en la vista del Explorador de Servidor (había hecho una conexión con mi archivo SDF). Una vez que cerré esta conexión, todo funcionó perfectamente.

Ok, esta es mi mala solución al problema. Finalmente lo hice funcionar. Win8 VS2012 EF5 MVC4

  • Asegúrese de tener instalado el paquete Nuget EntityFramework.SqlServerCompact
  • Al principio, no agregue el DbContext manualmente. En su lugar, use el menú del andamio
  • Cuando haya creado un Controlador + Vistas usando andamios, vuelva a su conexión anterior en el web.config, el que usa SQL CE 4.0. Entonces todo funciona bien para mi

Siento que esto está relacionado, pero utilicé la solución anterior para solucionar el problema y dejar que vuelva a crear controladores. El problema que tuve después de eso fue que parecía que no podía encontrar mi base de datos SQL Compact después de eso en el explorador de servidores. Parecía estar funcionando cuando agregué la aplicación, pero no pude encontrarla. Una vez que eliminé el constructor: public class SchoolContext: DbContext {public SchoolContext (): base (“School”) {}.

Pude ver el DB nuevamente. Todavía estoy en desarrollo y necesito agregar más controladores, así que tendré que usarlo de nuevo, supongo. Pero esto me llevó toda la mañana averiguar por qué de repente ya no podía ver la base de datos en el explorador del servidor.

Si usa VS 2012, también deberá indicarle a EF que use SQL Compact en lugar de localDb.

       

Una forma más fácil es instalar el paquete EF SQL Compact Nuget .

Para obtener más detalles, consulte esta entrada de blog .