entity framework - solicitado - La conexión con nombre especificado no se encuentra en la configuración, no está destinada a ser utilizada con el proveedor de EntityClient o no es válida
no se encuentra el proveedor de datos.net framework solicitado puede que no esté instalado oracle (10)
Acabo de descubrir que si se crea una aplicación en IIS desde VS2010 dos niveles desde la raíz del sitio web, este error podría ocurrir. No estoy seguro de por qué sucede, tendría que investigar más. Por ejemplo, si su aplicación está en esta ruta: /admin/advertiser
el error aparecerá si no tiene /admin
directorio virtual en su sitio IIS.
Todo lo que hice fue crear un directorio de admin
vacío en mi error .../intepub/wwwroot
desaparecido.
Descubrirá que no podrá iniciar la depuración hasta que realice el paso anterior.
Tuvimos este problema en nuestro equipo en el pasado, tomó algo de tiempo recordarlo, pero así fue como lo arreglamos antes también.
Tengo un objeto de infraestructura de una entidad y cuando lo agrego a mi proyecto, la connectionstring
se agrega a app.config
en la sección connectionstring
, pero cuando quiero crear un nuevo entitycontext
y uso este connectionstring
, aparece este error
Aunque la respuesta de Morteza Manavi '' resuelve este problema, otra solución es construir la cadena de conexión dinámicamente y pasarla al constructor para su ObjectContext:
public static string CreateConnectionString()
{
var assemblyPath = Assembly.GetExecutingAssembly().Location;
string assemblyLocation = Path.GetDirectoryName(assemblyPath);
string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf");
var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath };
var entityBuilder = new EntityConnectionStringBuilder
{
ProviderConnectionString = sqlBuilder.ConnectionString,
Provider = "System.Data.SqlServerCe.3.5",
Metadata = @"res://*/YourModel.csdl|
res://*/YourModel.ssdl|
res://*/YourModel.msl"
};
return entityBuilder.ToString();
}
// Snip...
var entityContext = new YourObjectContext(CreateConnectionString());
Esto elimina la necesidad de copiar la información de la cadena de conexión al app.config de su proyecto de inicio que, al menos en mi caso, no era deseable.
Debe copiar la cadena de conexión en la aplicación.config a su web.config, o copiar todo el archivo al proyecto que muestra la salida. Es una de las condiciones para consumir el marco.
Estoy usando la arquitectura n''tier y tengo el mismo problema pero este me ayuda. Espero que esto te ayude. Primero tienes la misma connection string
en tus libraries
donde puedes acceder a DB como en app.config
y web.config
después de que simplemente agregas un constructor sobrecargado en el archivo .edmx (Model.context.cs) que ahora tienes dos constructores. predeterminado y el otro que acaba de agregar (sobrecargado).
public YourEntityName(string connString)
: base(connString)
{
}
Hola, tuve este problema y me estaba volviendo loco. De todos modos finalmente descubrí cuál era el problema. Lo primero que debe hacer es asegurarse de que las connectionstrings
en app.config
y web.config
sean las mismas. Luego debe hacer doble clic en el archivo .edmx
para poder ver las tablas. Una vez que haga clic en cualquier lugar cerca de las tablas, pero no en las tablas, vaya a propiedades. En la lista desplegable, seleccione ConceptualEntityModel
y busque el Nombre del contenedor de la entidad y recuérdelo bien.
Luego ve al diseñador del archivo edmx y abre los constructores. (el diseñador es la subcarpeta del archivo edmx) los constructores deben tener dos parámetros en el parámetro BASE
public DBEntities() : base("name=DBEntities", "DBEntities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
Este es uno de ellos. el primer parámetro debe tener el nombre del archivo de proyecto en el que se encuentra el archivo .edmx
. El segundo parámetro debe tener el nombre del nombre del contenedor de la entidad de las propiedades que mencioné anteriormente. no te olvides de organizar todos los constructores con: base("", "")
Al menos ese era mi problema y mi problema se resolvió así. Espero que puedas resolver el tuyo así.
Me encontré con este problema cuando traté de poner mi lógica de base de datos personalizada en un archivo .dll para ser utilizado por múltiples proyectos en mi solución.
Si bien el .dll tenía el archivo app.config correcto, no funcionó. Los marcos de entidad querían la información de conexión en el app.config del .exe. Copiar la información allí funcionó bien.
La solución de Morteza de pegar la cadena de conexión directamente en el .edmx no funcionó para mí, ya que no me permitió pegar el valor allí, aunque eso es precisamente lo que quería poder hacer.
Olvidé agregar providerName = "System.Data.EntityClient" como atributo en la cadena de conexión. Esto resultó en este error tan
<add name="connectionName" connectionString="metadata=res://*/..." providerName="System.Data.EntityClient" />
en lugar de
<add name="connectionName" connectionString="metadata=res://*/..." />
Sospecho que su problema proviene del hecho de que tiene más de un proyecto en su solución y el que contiene el material de su infraestructura de entidad, incluidos los archivos de edmx
, NO es el proyecto de inicio de las soluciones. En este caso, incluso si la cadena de conexión existe en el proyecto EF app.config
, todavía CLR no puede encontrarla en tiempo de ejecución. Por ejemplo, si tiene un sitio web y un proyecto EF en su solución, debe copiar la cadena de conexión de la aplicación app.config
del proyecto EF a la app.config
de su sitio web. Básicamente, cualquier cadena de conexión de datos debe existir en el archivo de configuración del proyecto que los hilos .Net iniciados por CLR (es decir, su proyecto de inicio). Si este no es su caso, simplemente abra su archivo edmx
, haga clic derecho sobre su superficie, seleccione propiedades y copie la cadena de conexión y péguela en la sección de la cadena de conexión app.config
. De esta manera, puede asegurarse de que está teniendo la correcta en su configuración.
EDITAR:
Como puede ver aquí en Documenation en ObjectContext Constructor , el primer parámetro es el nombre de la conexión que es código generado en el momento de crear su EDM. Si, de alguna manera, el nombre de su conexión se cambia, lo único que debe hacer es hacer clic derecho en su modelo y seleccionar "Actualizar el modelo de la base de datos ...", luego siga el asistente para actualizar su confing y diseñador para reflejar esto cambio.
Tenía una biblioteca de clase que tampoco quería trabajar con EF. Después de copiar el app.config (o simplemente la sección connectionstring) de mi clase libraray al proyecto exe, ¡la conexión funcionó bien! Probablemente se espera que el archivo de configuración esté en la misma carpeta que el proyecto exe y, por lo tanto, no se haya encontrado. ¡Así que siempre tenga una alerta extra cuando se usan los archivos de configuración en un proyecto de biblioteca de clase!
Tuve una variación en esto que nadie parecía cubrir.
Tuve un proyecto principal con un par de modelos y un Proyecto de prueba que contenía pruebas unitarias. El Proyecto de prueba estaba funcionando, pero luego se detuvo con el error mencionado en el PO. No había hecho ningún cambio de nombre ni moviendo el archivo EDMX.
Muchos de los consejos mencionados mencionaron la comparación de archivos .config, pero mi proyecto no tenía ninguno.
Al final, copié el archivo app.config del proyecto principal en mi proyecto de prueba y luego funcionó. Si este es el paso correcto o presentará problemas de mantenimiento cuando se agregan modelos adicionales, no sé, pero al menos las pruebas de mi unidad se están ejecutando correctamente ahora.