Estoy usando el framework de entidades y ASP.NET MVC 4 para construir una aplicación
Mi solución se divide en dos proyectos;
- Una biblioteca de clases que incluye mi archivo de modelo de datos (.edmx) y algunas interfaces personalizadas
- El proyecto MVC 'contenedor' que hace referencia a la biblioteca de clases anterior
Mi problema es que cuando intento usar el DbContext ' MyEntites ' obtengo el siguiente error:
No se pudo encontrar una cadena de conexión llamada 'MyEntities' en el archivo de configuración de la aplicación.
Supongo que el problema tiene algo que ver con el hecho de que la cadena de conexión se encuentra dentro de la configuración de la aplicación de la biblioteca de clases en lugar del proyecto MVC.
¿Alguien tiene alguna sugerencia?
PM> Update-Database -Verbose Using StartUp project 'xxxxx.Web.Home'. Using NuGet project 'xxxxx.Web.Home.Dal'. Specify the '-Verbose' flag to view the SQL statements being applied to the target database. Target database is: 'MovieDatabase-0.0.2' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
Respuestas:
Intente copiar la cadena de conexiones al archivo .config en el proyecto MVC.
fuente
Tiene razón, esto sucede porque la biblioteca de clases (donde el archivo .edmx) no es su proyecto de inicio / principal.
Deberá copiar la cadena de conexión al archivo de configuración del proyecto principal.
En caso de que su proyecto de inicio / principal no tenga un archivo de configuración (como en mi caso de Aplicación de consola) simplemente agregue uno (Proyecto de inicio - Agregar nuevo elemento -> Archivo de configuración de la aplicación).
Puede encontrar información más relevante aquí: MetadataException: no se puede cargar el recurso de metadatos especificado
fuente
asegúrese de hacer su proyecto (con DbContext) como inicio
O
Agregue al proyecto que se establece como inicio su cadena de conexión en la app.config (o web.config)
O
Llama al comando así
Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'
Vuelva a intentarlo
fuente
Set as Startup Project
, según la captura de pantalla que se muestra arriba. (aunque si presiona F5, no podrá iniciar la biblioteca de la clase)Podrías simplemente pasar la cadena de conexión
EntityFramework
y seguir con tu vida:fuente
Como supones, tiene que ver con que la cadena de conexión esté en app.config de la biblioteca de clases.
Copie la entrada de la clase app.config en el contenedor
app.config
oweb.config
archivofuente
Si tiene varios proyectos en solución, configure el proyecto tal como comenzó donde tiene su App.config de verdad.
fuente
copie la cadena de conexión
app.config
o elweb.config
archivo en el proyecto que se ha establecido en "Establecer comoStartUp
proyecto" y, en el caso de utilizar el marco de la entidad en el proyecto de capa de datos, instale el marco de la entidad nuget en el proyecto principal.fuente
También ocurre si el proyecto de inicio se cambia al que no tiene las cadenas de conexión .
fuente
Asegúrese de agregar las cadenas de conexión después de la
entityFramework
sección:fuente
Si, es tonto. Puede evitar copiar la cadena de conexión utilizando un generador de conexiones. Código VB.Net (utilizado en producción, pero ligeramente modificado aquí, así que trátelo como no probado, feliz de ayudar con cualquier problema), donde tengo una variable serverName, una base de datos variable, los paso a un método y hago que genere la conexión para mi:
fuente
¿Está utilizando más de un proyecto en su solución?
Porque si es así, la configuración web que debe verificar es la del mismo proyecto que el archivo de .edmx
fuente
Agregue ConnectionString al archivo MVC Project Web.config
fuente
He tenido este problema cuando uso varios proyectos, el proyecto de inicio con web.config y app.config para el proyecto EntityFramework.
para evitar este problema debes:
fuente
Me he enfrentado al mismo problema. Se me olvidó poner una cadena de conexión al proyecto de inicio ya que estoy realizando una operación de acceso a datos desde otra capa. Además, si no tiene app.config en su proyecto de inicio, agregue el archivo app.config y luego agregue una cadena de conexión a ese archivo de configuración.
fuente
Obtuve esto al no tener el proyecto configurado como inicio, como lo indica otra respuesta. Mi contribución a esto: cuando haga Add-Migrations y Update-Database, especifique el proyecto de inicio como parte del comando en Nuget Package Manager Console (no incluya los caracteres '[' o ']', eso es solo para mostrarle que usted necesita cambiar el texto ubicado allí por el nombre de su proyecto):
Deberias hacer eso.
fuente
Es porque su clase de contexto se hereda de DbContext. Supongo que tu ctor es así:
name=...
debe cambiarse por el nombre de su conexiónfuente
La cadena de conexión generada por el proyecto que contiene el archivo .edmx genera la cadena de conexión, esto parece ser un remanente de los tipos de archivos app.config que se copiaron en el directorio de salida y al que el ejecutable hace referencia para almacenar la información de configuración del tiempo de ejecución.
Esto interrumpe el proyecto web ya que no hay un proceso automático para agregar información aleatoria .config al archivo web.config para el proyecto web.
Lo más fácil es copiar la cadena de conexión del archivo de configuración a la sección de conexiones del archivo web.config y no tener en cuenta el contenido del archivo de configuración.
fuente
La mejor manera que acabo de encontrar para abordar esto es establecer temporalmente ese proyecto (muy probablemente una biblioteca de clases) en el proyecto de inicio. Esto obliga a la consola del administrador de paquetes a usar ese proyecto como fuente de configuración. Parte de la razón por la que se configura de esta manera se debe al modelo de arriba hacia abajo que suelen seguir los archivos económicos. La regla general es que el proyecto más cercano al cliente (aplicación MVC, por ejemplo) es el web.config o app.config que se utilizará.
fuente
Asegúrese de haber colocado la cadena de conexión en ROOT web.config del proyecto de inicio.
Sé que estoy afirmando algo obvio aquí, pero también me pasó a mí, aunque ya TENÍA la cadena de conexión en la Web de mi proyecto MVC.Config (el archivo .edmx se colocó en un proyecto de biblioteca de clase diferente) y no pude no entiendo por qué sigo recibiendo una excepción ... Para resumir, copié la cadena de conexión a Views \ Web.Config por error, en una extraña combinación de cansancio y no desplazarse al final de la página. -el-escenario-explorador de soluciones. Sí, estas cosas también les pasan a los desarrolladores veteranos :)
fuente
Este problema ocurre cuando usa Capas en su Proyecto y define o instala el marco de Entidad en DataLayer e intenta ejecutar su Proyecto
Entonces, para superar este problema, copie la cadena de conexión de la capa donde está el archivo Edmx y pegue la cadena de conexión en web.config principal.
fuente
Agregue una cadena de conexión en el archivo web.config raíz del proyecto MVC 'contenedor' que hace referencia a la biblioteca de clases de la siguiente manera:
Si no desea utilizar "MyEntities" como nombre de conexión, cámbielo como desee pero realice el siguiente cambio en su clase MyEntities DbContext:
La razón de este error es, si no especificaremos el nombre de la cadena de conexión o la cadena de conexión en la clase derivada de DbConext (en su caso es MyEntities), entonces DbContext buscará automáticamente una cadena de conexión en el archivo web.config raíz cuyo nombre es igual que el nombre de la clase derivada (en su caso, es Mis entidades).
fuente
Tuve este problema al ejecutar MSTest. No podría hacerlo funcionar sin la bandera de "noisolation".
Esperemos que esto ayude a alguien. Me costó mucho tiempo resolver eso. Todo salió bien desde el IDE. Algo extraño sobre el Entity Framework en este contexto.
fuente
Migraciones regulares
Hay dos opciones: la primera que todos aquí han sugerido es asegurarse de que la cadena de conexión esté en el archivo Web.config del proyecto. Al trabajar con cadenas de conexión desde la configuración de la aplicación de Azure, eso significa sobrescribir sus valores de Web.config con los valores de Azure.
Azure o migraciones automáticas (programáticas)
Hay una segunda opción disponible si está ejecutando migraciones mediante programación, que le permite ejecutar migraciones utilizando una cadena de conexión que se obtiene dinámicamente (o mediante la configuración de la aplicación de Azure) sin almacenarla en Web.config:
Al establecer la base de datos TargetData de la configuración , use el constructor DbConnectionInfo que toma una cadena de conexión y un nombre de proveedor en lugar del constructor que toma solo un nombre de conexión. Si su cadena de conexión no tiene un nombre de proveedor y está usando SQL Server / Azure SQL, use "System.Data.SqlClient"
fuente
Esto también podría dar como resultado que no se hagan suficientes referencias de dll en el código de llamada. Un pequeño truco torpe podría salvarte el día.
Estaba siguiendo el enfoque de DB First y había creado el archivo EDMX en el proyecto de la biblioteca DAL Class, y esto estaba haciendo referencia a la biblioteca BAL Class, que a su vez fue referenciada por un servicio WCF.
Como recibí este error en el BAL, probé el método mencionado anteriormente para copiar los detalles de configuración de la configuración de la aplicación del proyecto DAL, pero no lo resolví. En última instancia, con la punta de un amigo, acabo de agregar un archivo EDMX ficticio al proyecto WCF (con la conectividad de base de datos relevante, etc.), por lo que importó todo lo necesario, y luego eliminé el archivo EDMX, y me deshice del problema con Una construcción limpia.
fuente
Hay un comentario en la respuesta superior de @RyanMann que sugiere:
Esta es una sugerencia fantástica!
¡También funciona para compartir cadenas de conexión entre los archivos App.config y Web.config!
Cualquier persona que quiera seguir esta sugerencia, debe dirigirse a esta respuesta SO . Tiene una guía paso a paso realmente genial para compartir cadenas de conexión entre múltiples proyectos en una solución.
La única advertencia es que
configSource
debe existir en el mismo directorio o en un subdirectorio. El enlace anterior explica cómo usar "Agregar como enlace" para solucionar esto.fuente
Tuve este error al intentar usar EF dentro de un complemento de AutoCAD. Los complementos CAD obtienen la cadena de conexión del archivo acad.exe.config. Agregue la cadena de conexión como se mencionó anteriormente al archivo de configuración de acad y funciona.
El crédito va a Norman.Yuan de ADN.Network.
fuente
Si está utilizando un modelo MVVM, intente copiar las cadenas de conexión a todas las partes de su proyecto.
Por ejemplo, si su solución contiene dos proyectos, el proyecto de biblioteca de clases y el proyecto wpf, debe copiar las cadenas de conexión del proyecto de fondo (proyecto de clase de biblioteca) y colocar una copia en el archivo App.config del proyecto wpf.
Espero que sea útil para ti :)
fuente
Agregue Connectoinstrnig en el archivo web.config
fuente