2012-09-07 26 views
14

Estoy tratando de aprender ASP.NET MVC, así que estoy siguiendo el tutorial de Music Store en el sitio web asp.net.Error al crear un controlador en Visual Studio 2012

Estoy en la parte donde crea el StoreManagerController utilizando Album.cs como la clase de modelo y MusicStoreEntities.cs como la clase de contexto de datos.

El error cuando creo el controlador es: No se pueden recuperar los metadatos de 'MvcMusicStore.Models.Album'. 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 utilice.

suena como que estoy usando dos bases de datos diferentes, pero aquí es mi sección de cadena de conexión de Web.config:

<connectionStrings> 
<add name="MusicStoreEntities" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\MvcMusicStore.sdf"/> 
</connectionStrings> 

Lo curioso es que si comento hacia fuera la cadena de conexión MusicStoreEntities y luego tratar de crea el StoreManagerController, funciona. También funciona si cambio el Marco de objetivos en la configuración de la solución a .NET Framework 4, abriendo la solución en Visual Studio 2010 y luego creando el Controlador.

¿Es un problema con Visual Studio 2012 o la cadena de conexión? Tal vez algún problema de compatibilidad con CE4.0 y VS2012?

Respuesta

8

duplicados de Add Controller in MVC4 not working y MVC4 Scaffolding Add Controller gives error "Unable to retrieve metadata..."

Trate de comentar la cadena de conexión y uso por defecto cuando se cree controlador.

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" /> 

Después de la creación, devuelva su cadena de conexión.

19

El problema radica en el uso de la edición CE de la base de datos utilizada en los tutoriales. Cuando cambié a otra versión de DB como SQL Server 2012, funcionó bien para mí. Prueba esto:

Change string esta conexión

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

Con

<add name="MusicStoreEntities" connectionString="Data Source=DBInstanceName;Initial Catalog=MvcMusicStore;Integrated Security=True" providerName="System.Data.SqlClient" /> 
+0

¡Impresionante, me ahorró mucho tiempo, gracias! – casaout

+1

Gracias casaout, me alegro de que ayude :) – Nexus23

2

creo que he encontrado una solución. Antes de generar un nuevo controlador, elimine la cadena de conexión de Web.config. Eso te permitirá generar el controlador sin error. Luego, vuelva a poner la cadena de conexión. Eso te permitirá ejecutar la aplicación.

Estoy usando SQL CE4, y no tengo un constructor explícito para el DbContext (MusicStoreEntities para usar el ejemplo anterior). Mi cadena de conexión coincide con el nombre de la clase DbContext.

3

En su clase de contexto de derivados que necesita para aprobar el nombre de base de datos para el constructor de base en lugar del nombre de cadena de conexión que parece ser la fuente de confusión para la mayoría de las personas que tienen este problema por lo que en su caso con cadena de conexión

NOTA: También se eliminó la barra invertida antes de MvcMusicStore.sdf como no seguro de que es necesario

que estés clase de contexto derivado debe definirse como

public class MusicStoreContext : DbContext 

{ MusicStoreContext pública(): base ("MvcMusicStore") {} ...

Esperanza esto funciona para ti y para otros como lo hace para mí.

0

cadena de conexión Eliminación también trabajó para mí, sólo pegarlo de nuevo después ha sido creado controlador y construir proyectos

1

también estoy ahora siguiendo este ejemplo aquí: Accessing Your Models Data from a Controller. Está marcado en negrita, pero pude volar sobre él a primera vista:

¡SOLAMENTE tiene que construir la solución para que los Modelos y DBContexts aparezcan en el asistente "Agregar Controlador"!

+0

¿Cómo se relaciona su solución con esta pregunta? – ZoomIn

+0

@ZoomIn En realidad, tuve un problema similar que parecía relacionado. El último paso del tutorial fue mencionar la adición de la cadena de conexión ... la construcción del proyecto permite a VS incluir los tipos de DBContext recién creados en sus asistentes ... – Kjellski

1

Esto podría ser más fácil de leer .... El problema es que a la cadena de conexión del tutorial le falta el '/' delante del nombre del archivo sdf.

malo:

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

buena:

<add name="MusicStoreEntities" 
connectionString="Data Source=|DataDirectory|/MvcMusicStore.sdf" 
providerName="System.Data.SqlServerCe.4.0"/> 
2

Sí, una solución tan simple !! .. Eliminación de cadena de conexión y pegarla de nuevo después ha sido creado controlador y la construcción del proyecto. Las conexiones de datos de Server Explorer no son necesarias. En App_Data SHOW_ALL, se crea un tipo de archivo .sdf después de la compilación y la primera ejecución de depuración. Esto se carga en la Web Hostsite como un archivo, y no como una base de datos SQL.

Cuestiones relacionadas