visual tiempo studio net framework encriptar elemento ejecucion declarado conexion cambiar cadena asp app c# entity-framework asp.net-mvc-4

tiempo - encriptar cadena de conexion app.config c#



No se pudo encontrar una cadena de conexión llamada ''MyEntities'' en el archivo de configuración de la aplicación (22)

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 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 app.config de la biblioteca de clases en lugar del proyecto MVC.

¿Alguien tiene alguna sugerencia?


Migraciones regulares

Hay dos opciones: la primera que todos han sugerido aquí 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 Azure, eso significa sobrescribir los valores de Web.config con los valores de Azure.

Migraciones Azure o automáticas (programáticas)

Hay una segunda opción disponible si está ejecutando migraciones programáticamente, que le permite ejecutar migraciones usando una cadena de conexión que se obtiene de forma dinámica (o a través de la configuración de la aplicación de Azure) sin almacenarla en Web.config:

Al configurar la base de datos TargetDatabase , use el constructor DbConnectionInfo que toma una cadena de conexión y un nombre de proveedor en lugar del constructor que solo toma un nombre de conexión. Si la cadena de conexión no tiene un nombre de proveedor y está usando SQL Server / Azure SQL, use "System.Data.SqlClient"


  1. Agregar un archivo de 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 :

    <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> </configSections> <connectionStrings> <!-- your connection string goes here, after configSection --> </connectionString>


¿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 .edmx


Agregue ConnectionString al archivo MVC Project Web.config


Agregue Connectoinstrnig en el archivo web.config

<ConnectionStiring> <add name="dbName" Connectionstring=" include provider name too" ></ConnectionStiring>


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:

<connectionStrings> <add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" /> </connectionStrings>

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

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

El motivo de este error es: Si no especificamos el nombre de la cadena de conexión O conectamos la cadena en la clase derivada de DbConext (En su caso es MyEntities), DbContext buscará automáticamente una cadena de conexión en el archivo raíz web.config. igual que el nombre de clase derivado (en su caso es My Entities).


Como usted supone, 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 al archivo app.config o web.config del contenedor


Este problema ocurre cuando está utilizando capas en su proyecto y definió o instaló el trabajo de marco de entidad en DataLayer e intentó 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.


He enfrentado el mismo problema. Me faltó poner la 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, agregue el archivo app.config y luego agregue una cadena de conexión a ese archivo de configuración.


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:

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

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


La cadena de conexión generada por el proyecto que contiene el archivo .edmx genera la cadena de conexión, lo que parece ser un remanente de los tipos de archivos app.config que se copiaron en el directorio de salida y fueron referenciados por el ejecutable para almacenar información de configuración de tiempo de ejecución.

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


La mejor manera que encontré para abordar esto es establecer temporalmente ese proyecto (probablemente una biblioteca de clases) para el proyecto de inicio. Esto obliga a la consola del administrador de paquetes a usar ese proyecto como su fuente de configuración. parte de la razón por la que se configura de esta manera se debe al modelo descendente que usualmente siguen los archivos econfig. La regla de oro es que el proyecto más cercano al cliente (por ejemplo, la aplicación MVC) es web.config o app.config que se usará.


Puede pasar la cadena de conexión a EntityFramework y continuar con su vida:

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


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


Si, es tonto Puede evitar copiar la cadena de conexión utilizando un generador de conexiones. Código VB.Net (usado en producción, pero ligeramente modificado aquí, por lo tanto, trate como no probado, feliz de ayudar con cualquier problema), donde tengo una variable serverName, una variable databaseName, las 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)


También sucede 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)

Tiene razón, esto sucede porque la biblioteca de clases (donde está 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) solo 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


Tuve este problema al ejecutar MSTest. No podría hacerlo funcionar sin la bandera "noisolation".

Esperemos que esto ayude a alguien. Me costó mucho tiempo darme cuenta de eso. Todo funcionó bien desde el IDE. Algo extraño sobre el Entity Framework en este contexto.


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


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 también me pasó a mí, aunque ya TUVO la cadena de conexión en Web.Config de mi proyecto MVC (el archivo .edmx se colocó en un proyecto de biblioteca de clases 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 desplazarse hasta la parte inferior -el escenario de la solución-explorador. Sí, estas cosas les pasan a los desarrolladores veteranos también :)


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

O

Agregue al proyecto que se establece como inicio su cadena de conexión en la aplicación.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