No se pudo encontrar una cadena de conexión llamada ‘MyEntities’ en el archivo de configuración de la aplicación

Estoy usando entity framework 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 bash utilizar el DbContext ‘ MyEntitesaparece 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 del app.config de la biblioteca de clase en lugar del proyecto MVC.

¿Alguien tiene alguna sugerencia?

Intente copiar la cadena de conexiones al archivo .config en el proyecto MVC.

Tienes razón, esto sucede porque la biblioteca de clases (donde el archivo .edmx) no es tu startup / proyecto 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).

Se puede encontrar información más relevante aquí: MetadataException: no se puede cargar el recurso de metadatos especificado

asegúrese de hacer su proyecto (con DbContext) como inicio

en el proyecto, haga clic derecho y seleccione

O

Agregue al proyecto que está configurado como iniciar su cadena de conexión en la aplicación.config (o web.config)

O

Llame al comando de esta manera

Update-Database -Script -ProjectName '' -StartupProjectName '' -ConnectionString 'data source=.;initial catalog=;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

Vuelva a intentarlo

Simplemente podría pasar la cadena de conexión a EntityFramework y continuar con su vida:

 public partial class UtilityContext : DbContext { static UtilityContext() { Database.SetInitializer(null); } public UtilityContext() : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True") { } // DbSet, OnModelCreating, etc... } 

Según su conjetura, tiene que ver con la cadena de conexión que está en app.config de la biblioteca de clase.

Copie la entrada de la clase app.config en el archivo app.config o web.config del contenedor

Si tiene varios proyectos en solución, entonces configure el proyecto como iniciado donde tiene su verdad App.config.

copie la cadena de conexión al archivo app.config o web.config en el proyecto que se ha configurado como “Establecer como proyecto de inicio” y si usa el marco de entidad en la capa de datos, instale el marco de entidad nuget en el proyecto principal.

También ocurre si el proyecto de inicio se cambia a uno, que no tiene las cadenas de conexión .

  1. Haga clic derecho en la solución – haga clic en Propiedades
  2. En Propiedades comunes, seleccione el proyecto de inicio
  3. En el panel derecho, seleccione el proyecto que tiene las cadenas de conexión (en la mayoría de los casos, serán proyectos MVC: el proyecto que inicia la solución)

Sí, es tonto. Puede evitar copiar la cadena de conexión utilizando un generador de conexión. Código VB.Net (usado 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 variable databaseName, los paso a un método y hago que genere la conexión para mi:

  Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""") Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString) SqlBuilder.DataSource = serverName SqlBuilder.InitialCatalog = databaseName EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString Using vmCtx As New VmEfConn(EfBuilder.ConnectionString) 

¿Estás usando más de un proyecto en tu solución?

Porque si lo estás, la configuración web que debes verificar es la que está en el mismo proyecto que el archivo de .edmx

  1. Agregue un archivo App.Config
  2. Establecer el proyecto como proyecto de inicio.
  3. Asegúrese de agregar las cadenas de conexión después de la sección entityFramework :

       

Agregue ConnectionString al archivo MVC Project Web.config

He enfrentado el mismo problema. Me faltaba poner una cadena de conexión al proyecto de inicio ya que estoy realizando operaciones de acceso a datos desde otra capa. también si no tiene app.config en su proyecto de inicio, entonces agregue el archivo app.config y luego agregue una cadena de conexión a ese archivo de configuración.

La cadena de conexión generada por el proyecto que contiene el archivo .edmx genera la cadena de conexión, esto parecería ser un holdover de los tipos de archivos app.config de los archivos que se copiaron en el directorio de salida y el archivo ejecutable para guardar la información de configuración de tiempo de ejecución.

Esto se rompe en el proyecto web ya que no hay un proceso automático para agregar información aleatoria de configuración en el 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 e ignorar el contenido del archivo de configuración.

La mejor manera que encontré para abordar esto es establecer temporalmente ese proyecto (muy probablemente una biblioteca de clases) para 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 está configurado de esta manera es debido al modelo descendente que suelen seguir los archivos econfig. 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á.

Asegúrese de haber colocado la cadena de conexión en ROOT web.config del proyecto de inicio.

Sé que estoy diciendo algo obvio aquí, pero a mí también me pasó, aunque ya tenía la cadena de conexión en el Web.Config de mi proyecto MVC (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 … En pocas palabras, copié la cadena de conexión a Views \ Web.Config por error, en una extraña combinación de cansancio y no desplazamiento hacia el fondo de -el escenario de la solución-explorador. Sí, estas cosas les pasan a los desarrolladores veteranos también 🙂

Este problema ocurre cuando usa capas en su proyecto y define o instala el trabajo de marco de entidad en DataLayer e intenta ejecutar su proyecto.

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 la web.config principal.

Tuve 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:

  1. Necesita la cadena de conexión en el archivo * .config iniciado.
  2. Debe haber instalado la DLL EntityFramework en sus referencias

Agregue una cadena de conexión en el archivo raíz web.config del proyecto MVC ‘contenedor’ que hace referencia a la biblioteca de clases de la siguiente manera:

     

Si no desea usar “MyEntities” como nombre de conexión, cámbielo como lo desee, pero realice el siguiente cambio en su clase MyEntities DbContext:

 MyEntities: DbContext { public MyEntities():base("Name-Of-connection-string-you wish to connect"){ } } 

La razón de este error es: Si no especificamos el nombre de la cadena de conexión O conectamos una cadena en la clase derivada de DbConext (en su caso es MyEntities) entonces DbContext buscará automáticamente una cadena de conexión en el archivo raíz web.config nombre de whoes es lo mismo que el nombre de clase derivado (en tu caso son mis entidades).

Tuve este problema al ejecutar MSTest. No pude hacerlo funcionar sin la bandera “noisolación”.

Espero que esto ayude a alguien. Me costó mucho tiempo descubrirlo. Todo funcionó bien desde el IDE. Algo extraño sobre el Marco de la Entidad en este contexto.

Migraciones regulares

Hay dos opciones: la primera que todos han sugerido es garantizar que la cadena de conexión se encuentre en el archivo Web.config del proyecto. Al trabajar con cadenas de conexión desde la configuración de la aplicación Azure, eso significa sobrescribir los valores de Web.config con los valores de Azure.

Migraciones azules o automáticas (programáticas)

Hay una segunda opción disponible si está ejecutando migraciones programáticamente, 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 Azure) sin almacenarla en Web.config:

Al establecer TargetDatabase 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, entonces use “System.Data.SqlClient”

Agregar Connectoinstrnig en el archivo web.config