vista tutorial mvc modelo form espaƱol ejemplo desde controlador cero aprender c# asp.net-mvc

modelo - mvc c# tutorial



Agregar el controlador en MVC4 no funciona (11)

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

Modelo es:

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

A continuación se muestra mi cadena de conexión:

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

Cuando intento 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 contra diferentes tipos de servidores de bases de datos. En su lugar, cree un DbCompiledModel separado para cada tipo de servidor que se use.



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


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 fuera. Proyecto de construcción. Luego, agregar un controlador me funciona en MySql.

Descomentar después de agregar el controlador y continuar normalmente.


Esto va a parecer la cosa más tonta, pero ¿tienes alguna conexión con tu base de datos en otro lugar? Estaba corriendo en este mismo problema exacto. Tenía la base de datos abierta en la vista de Server Explorer (había realizado una conexión a mi archivo SDF). Una vez que cerré esta conexión, todo funcionó perfectamente.


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

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

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 de CE de destino.

Estos son mis pasos de resumen:

  • Instaló el paquete Nuget EntityFramework.SqlServerCompact.
  • Agregó el constructor predeterminado a mi clase DbContext.

    clase pública SchoolContext : DbContext {public SchoolContext (): base (" School ") {} ...}

  • Mi cadena de conexión es:

    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />

Entonces funcionó.


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

<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"> <parameters> <parameter value="System.Data.SqlServerCe.4.0" /> </parameters> </defaultConnectionFactory>

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

Para más detalles, echa un vistazo a esta entrada de blog .


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ías al contructor de la super clase.

Así por ejemplo :

<add name="MovieDBContext" ....... /> public class MovieDBContext : DbContext { public MovieDBContext() : base("Movie") { } }

Así que ya ves, el "MovidDBContect" es diferente de "Movie" .


Siento que esto está relacionado, pero utilicé la solución anterior para solucionar el problema y dejarme construir controladores de nuevo. El problema que tuve después de eso fue que no pude 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 quité el constructor: public class SchoolContext: DbContext {public SchoolContext (): base ("School") {}.

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


Soy nuevo en el uso de EF y MVC, pero lo que descubrí es que si no define la conexión de datos (no la comenta) o la cambia de nombre en web.config, Visual Studio le permitirá agregar el controlador. Si no se define ninguna conexión, EF utilizará automáticamente SQLExpress. Después de agregar el controlador, puede volver a agregar la cadena de conexión a web.config y el programa funcionará como se espera.

// 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+Movie+


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

Esto lo solucionó: 1. Comentando la cadena de conexión 2. Reconstruir el sitio web sin la cadena de conexión 3. Agregar el controlador 4. Descomentar la cadena de conexión 5. Reconstruir el sitio web

Todo funciona bien.