11

Tengo problemas con Visual Studio 2012, tratando de agregar un controlador MVC4 con andamios. Idealmente, me gustaría tener un modelo Entity Framework (archivo edmx, etc.) generado desde una base de datos usando Add New Item - Modelo de datos de entidad ADO.NET (es decir, no el código primero) en un ensamblaje separado de mi aplicación web. Sin embargo, cuando configuro y uso Agregar controlador, especificando "Controlador MVC con acciones de lectura/escritura y vistas, utilizando Entity Framework" y eligiendo una clase de modelo y una clase de contexto de datos de mi ensamblado DatabaseModel, aparece el siguiente mensaje de alerta.Andamio MVC4 de base de datos modelo Entity Framework en Visual Studio 2012

'Ifl.Payforit4.DatabaseModel.Mno' no es parte de la clase especificada 'Ifl.Payforit4.DatabaseModel.Payforit4Entities', y la clase de los 'Ifl.Payforit4.DatabaseModel.Payforit4Entities' no se pudo modificado para agregar una propiedad 'DbSet' al . (Por ejemplo, clase los 'Ifl.Payforit4.DatabaseModel.Payforit4Entities' podría estar en un conjunto compilado.)

No ser capaz de modificar la clase tiene sentido ya que está en otro conjunto, aunque en el mismo solución, y generado automáticamente a través de T4 pero mirando el código generado automáticamente para Payforit4Entities, la propiedad 'DbSet' ya está bastante clara.

public DbSet<Mno> Mnoes { get; set; } 

Yo he probado un número de otras cosas.

  1. poner el modelo de datos directamente en la aplicación web
  2. cambiar la clase de modelo para una variedad de otras tablas de la base de datos en caso de que haya un problema con la clase Mno
  3. reducir el modelo de datos que acaba de una tabla sencilla y simple
  4. utilizando Entity Framework Power Tools Beta 2 para realizar ingeniería inversa en un modelo de Code First. Esto generó un nuevo conjunto de errores. Puedo ver por qué es una versión beta.
  5. cambiar la estrategia de ADO.NET Data Model generación de código de Ninguno a predeterminado para crear un modelo de datos basado en ObjectContext en lugar de DbContext
  6. Desactivación de pluralización por lo que el nombre de la propiedad es Mno en lugar de Mnoes

Ninguno de ellos funcionó. Lo único que sí funcionó fue escribir a mano una clase derivada de Code First DbContext y POCO. Casualmente, cada ejemplo que he encontrado que demuestra que el andamio MVC4 usa este tipo de modelo de datos. ¿Hay algo en algún lugar que dice que Code First es el único tipo de modelo de datos que funciona con andamios MVC4? ¿Alguien ha logrado andamiar una base de datos primero (.edmx) modelo de datos en Visual Studio 2012? La base de datos es lo suficientemente compleja como para preferir seguir con una primera estrategia de base de datos.

Veo que tendrían que haber algunas diferencias en el andamiaje de Code First versus Database First models. Por ejemplo, el primero tiene la propiedad POCO que contiene la clave indicada por un KeyAttribute, mientras que el segundo contiene esa información en los archivos del modelo edmx. ¿Es este el motivo de la función de ingeniería inversa en Entity Framework Power Tools? ¿Se espera que nos alejemos de los archivos edmx para revertir los modelos Code First diseñados con el fin de utilizar el andamio MVC4? En caso afirmativo, ¿se espera que sigamos utilizando los proyectos de Datos dinámicos hasta que se hayan terminado las herramientas de poder de Entity Framework?

Respuesta

13

El truco es compilar primero su solución y luego escribir en la clase de contexto manualmente. No elija de la lista desplegable, sólo tiene que escribir el nombre de clase por sí mismo y funcionará mágicamente ;-)

Ver aquí: ASP.NET MVC4– How to use a Database First EF in a MVC controller

+0

Esto funcionó de maravilla y apoya a StackOverflow por darme este enlace mientras escribía mi pregunta. –

+0

Lo mismo aquí, no puedo creer lo retardado que esto es jajaja. – Dave

+1

Cuando intento esto, aparece "El tipo de modelo no es válido. Seleccione un elemento de la lista". – JasonRed

0

no creo que podamos andamio de archivos EDMX con Entity Framework 5.

He intentado un conjunto similar de cosas y todavía estoy golpeando errores.

Hay un par de sugerencias de que, tal vez, simplemente eliminar un bad edmx y comenzar de nuevo podría generar los archivos .tt correctos para permitir que el andamio funcione correctamente, pero aún no lo he visto.

Voy a intentar algo más para ponerlo en funcionamiento, ya que prefiero que primero se aproxime DB. Actualizaré esta respuesta si consigo algo más.

+0

¿Ya encontró una solución? también prefiero el primer acercamiento a db – daniel

+0

No, no he encontrado ninguna solución útil para esto. Como dice alexb a continuación, no es muy robusto, así que con suerte mejorará en una actualización –

+0

@zoidbergi: como tú, tengo muchos problemas sobre andamios en mi proyecto mvc4 con EF5 db primero. Probé en la vista previa de VS2013: el mismo proyecto, el mismo código ahora funciona bien. Así que estoy trabajando temporalmente en una VM para usar VS2013 de forma segura y poder volver a VS2012 si es necesario. – JYL

0

El generador de código de edmx en Entity Frameork 5/VS 2012 tiene errores. Crea código que está lleno de errores de compilación. Supongo que no estaba listo para el envío cuando se lanzó vs2012, por lo que establecieron el indicador de generación de código predeterminado en ninguno.

La única pregunta para Microsoft es: ¿cuándo podemos esperar una actualización que corrija esto?

-1

Es verdad! El truco consiste en compilar primero su solución y luego escribir manualmente la clase de contexto. No lo elijas de la lista desplegable, simplemente escribe el nombre de la clase por ti mismo y mágicamente funcionará ;-)

gracias !! ¡Marcus!

+0

No copie y pegue una respuesta para mostrar su agradecimiento. –

Cuestiones relacionadas