MVC4 Scaffolding Add Controller da error “No se pueden recuperar los metadatos …”

Estoy usando la versión RTM de Windows 8 y VS 2012 Ultimate. Tengo un proyecto MVC4 que usa SqlCe 4.0 con un primer modelo de marco de entidad de código .

El modelo es muy simple:

public class MyThing { public int MyThingId { get; set; } public int UserId { get; set; } public string Title { get; set; } public string Address { get; set; } public string Description { get; set; } public DateTime Date { get; set; } } 

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

“No se pueden recuperar metadatos para MyThing”

“No se admite el uso del mismo modelo 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.

¿Cómo hago para que funcione el andamiaje?

Por prueba y error, encontré la línea de código (es el ctor de DbContext) que está causando el error:

 public class MyThingDb : DbContext { // If I comment this constructor out the scaffolding works public MyThingDb() : base("DefaultConnection") { } public DbSet Things{ get; set; } } 

WTF?

También tropecé con este síntoma mientras ejecutaba un tutorial sobre el tema de la construcción de una aplicación MVC Music Store.

Definitivamente parece haber un error dentro de Visual Studio. Lo que parece desencadenar este error es elegir algún nombre, distinto del predeterminado, utilizado para la cadena de conexión.

Mi agradecimiento al usuario dwaynef en http://forums.asp.net/t/1838396.aspx/1 por encontrar esta solución.

Un poco elaborado que necesita, temporalmente durante la adición del nuevo controlador de andamios, cambie el nombre de su cadena de conexión a ‘DefaultConnection’ en web.config:

    

Si tiene más de una cadena de conexión, asegúrese de que solo esta esté allí mientras realiza la acción.

Aquí está mi valor de dos centavos. No creo que su solución realmente aborde el problema real. La verdadera solución es pasarle al constructor base el nombre de la base de datos en lugar del nombre de la cadena de conexión, de modo que si su cadena de conexión es

  

tu clase de contexto debe definirse como

  public class MyContext : DbContext { public MyContext() : base("MyDatabase") { }... 

Espero que esto funcione para ti y para los demás como lo hace para mí.

Esto es lo que funcionó para mí:

  • Vaya a la cadena de conexión en web.config cambie lo siguiente: providerName="System.Data.SqlClient"

en lugar de

providerName="System.Data.SqlServerCe.4.0"

  • Genera tu controlador.
  • Cambie el nombre de proveedor a ” System.Data.SqlServerCe.4.0 “.
  • ejecuta tu proyecto

Funciona para mí: en el cuadro de diálogo “Agregar nuevo objeto andamiado”, agregué un nuevo contexto (más) con cualquier nombre (para mí “ScaffoldingContext”). Entonces el andamio funciona. Simplemente cambie el nombre del contexto en el Controlador.

Después de probar diferentes opciones, el siguiente método resuelve el error.

Si el valor del nombre en la cadena de conexión coincide con el valor pasado al constructor, funciona.

  public MyThingDb() : base("name=MyContext") { } 

El problema puede deberse a que falta el [NotMapped] en una de las clases de modelos.

Como me perdí el atributo y estaba astucia mi cabeza.

 [Display(Name="Logo")] [DataType(DataType.Upload)] [NotMapped] public HttpPostedFileBase Logo { set; get; } 

Tenía un problema similar, pero no era el constructor predeterminado. También sucede si tiene varios proyectos en su solución y su proyecto “MVC” que enfrenta el MVC no hace referencia a EntityFramework.

Cambiar “cosas” dentro

 public DbSet Things { get; set; } } 

a “Database1” donde “Database1” es el nombre del archivo de base de datos en el disco que aparece en su archivo Web.config como “Database1.sdf”

La solución que funcionó para mí es pasar el mismo nombre de base de datos que en su cadena de conexión a la base de datos de su clase dbContext.

Lo resolví presionando CTRL + F5 para reconstruir mi proyecto antes de agregar mi controlador.

En ocasiones, esto puede deberse a una propiedad de asociación o a un atributo de clave externa

Esto es lo que funcionó para mí …

Comenté la conexión mediante el ‘System.Data.SqlServerCe.4.0’ y luego agregué el controlador con plantillas de andamios.

En su clase de contexto, debe comentar el DbConfigurationType cuando va a crear un controlador con andamios.

 //[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] public class NameDbContext {} 

MVC 5 / EF 6

quizás puedas hacer esto en la versión anterior?

  1. comentado las cadenas de conexión en la web / app.config luego guardar
  2. intente crear un nuevo controlador y haga que VS cree un “nuevo” elemento dbcontext en lugar de elegir el que ya tiene
  3. haz clic en crear
  4. eliminar nueva clase dbcontext
  5. reemplace el controlador dbcontext con el suyo
  6. eliminar las cadenas de conexión en web / app.config y luego guardar

¡trabajó para mi!

Tenía el mismo mensaje de error, pero no tenía nada que ver con la cadena de conexión.

Es un caso muy raro, pero espero que esto ayude a alguien. El nombre de mi modelo era el mismo que uno de los segmentos de mi nombre de espacio de nombres.

Por ejemplo:

 namespace blah.blah.Building public class Building 

Cambié el nombre de mi espacio de nombre y solucioné todos los usos, ¡y luego funcionó el andamio t4!


Ella es otra posible solución. Es posible que primero deba ejecutar andamios para modelos “dependientes”. Luego, suba a modelos complicados que tienen muchas dependencias.

Tuve un problema similar al intentar crear una vista desde mi controlador utilizando el andamio. En el cuadro de diálogo crear vista, simplemente borré el menú desplegable “Clase de contexto de datos” y luego el mecanismo de andamios fue redactado correctamente.

    Intereting Posts