2010-10-27 20 views
9

Estoy probando Enterprise Library 5.0 y estaba haciendo algunas pruebas de unidad en mi BL, necesito tener una aplicación. config en la DL o en el proyecto de prueba?Se produjo un error de activación al intentar obtener una instancia del tipo Base de datos, clave "" <- blank

Nota: Ya tengo la configuración de configuración en mi web.config en mi proyecto web.

cómo uso el DAAB:

private static Database db = DatabaseFactory.CreateDatabase(); 

db.ExecuteNonQuery("spInsertSalesman", salesman.Fullname); 

mi app.config en DL:

<configuration> 
    <configSections> 
     <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" /> 
    </configSections> 
    <dataConfiguration defaultDatabase="DBTEST" /> 
    <connectionStrings> 
     <add name="DBTEST" connectionString="Data Source=[dbsource];Initial Catalog=[dbname];User Id=sa;Password=password;" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 
+0

¿Hay alguien aquí que pueda ayudar? –

+0

El archivo de configuración probablemente debería estar con el proyecto de prueba, pero no estoy seguro si eso funciona. ¿Qué marco de prueba estás usando? –

+1

Sí, me di cuenta de que estaba haciendo referencia a la copia incorrecta .dll. funciona ahora, gracias por la ayuda./ –

Respuesta

0

yo estaba haciendo referencia a la copia .dll mal. ahora funciona.

+0

Para mí, todavía no funciona – Harsh

0

Como las bibliotecas de clases pueden tener el archivo app.config. Realmente no es útil cuando está utilizando EntLib 5.0 & desea acceder a la cadena de conexión en la clase libarry. Por lo tanto, debe agregar la configuración anterior a todos los archivos web.config que está utilizando en su solución. Por ejemplo, si tiene una capa UI, la capa WCF entre Business (biblioteca de clases) y la capa UI y la capa Business se encuentra entre el servicio WCF y el DAL (biblioteca de clases).

Aquí tendrá un archivo web.config en cada capa UI & WCF serveice Layer, por lo que estos dos archivos web.config deberían tener la configuración mencionada anteriormente.

-2

que era capaz de solucionar este error en mi proyecto DLL especificando el nombre de la cadena de conexión de forma explícita en la llamada CreateDatabase, así:

Database db = DatabaseFactory.CreateDatabase("DBTEST"); 

en lugar de

Database db = DatabaseFactory.CreateDatabase(); 
1

Esto es debido a la discordancia dll entre las dlls del GAC (Dlls en el ensamblado) y las dlls referidas por la aplicación.

Retire los dlls del ensamblaje e intente ejecutar.

  1. Inicio -> Ejecutar
  2. Asamblea Tipo
  3. Retire la DLL para el que está ocurriendo error de activación.
  4. Restablecer el IIS

Es de esperar que va a resolver su problema.

0

Tengo mismo problema y lo resuelvo por el cambio EntLib 5,0-3,1

2

Para agregar a otras razones.

Tenía una solución VS2010/csproj que hacía referencia a Enterprise Library 5.0.xxxxx.

Sin embargo, el csproj se estableció en "Target 3.5 Framework". Por lo tanto, o bien tenía que orientarme al marco de trabajo 4.0 o "bajar" a la versión 3.5 de Enterprise Library.

Pude actualizar mi marco de destino a 4.0, y luego los errores desaparecieron.

Esto es lo que puede hacer para averiguar qué versión del marco del código fue compilado para: (mini script de PowerShell)

[System.Reflection.Assembly]::LoadFrom("c:\somefolder\Any_Of_The_Practices.dll").ImageRuntimeVersion 

Si obtiene v2.0.50727, entonces tendrá problemas para ejecutar bajo Framework 4.0 (o superior).

EDIT:

También me dio este error al no tener las "correctas" DbProviderFactories definidos. Estoy publicar una configuración de MySQL que he encontrado en esta dirección: (copio que, en caso de que la URL muere en el futuro)

(De http://searchcode.com/codesearch/view/14385662)

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<configSections> 
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true"/> 
</configSections> 

<system.data> 
<DbProviderFactories> 
<add name="EntLibContrib.Data.MySql" 
invariant="EntLibContrib.Data.MySql" 
description="EntLibContrib Data MySql Provider" 
type="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" /> 
</DbProviderFactories> 
</system.data> 

<dataConfiguration defaultDatabase="Default Connection String"> 
<providerMappings> 
<add databaseType="EntLibContrib.Data.MySql.MySqlDatabase, EntLibContrib.Data.MySql, Version=5.0.505.0, Culture=neutral, PublicKeyToken=null" 
name="EntLibContrib.Data.MySql"/> 
</providerMappings> 
</dataConfiguration> 

<connectionStrings> 
<add name="Default Connection String" 
connectionString="database=northwind;uid=root;pwd=admin" 
providerName="EntLibContrib.Data.MySql"/> 
</connectionStrings> 

<startup> 
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
</startup> 
</configuration> 

Por último:

Una vez que obtuve este error porque no tenía un ConnectionString (en el archivo de configuración) con el mismo nombre que el valor de DefaultDatabase. Aka, el error simple de "calavera adormecida".

Puede poner este código de válvula de seguridad (justo antes de crear la base de datos) si lo desea.

 DatabaseSettings dataConfig = (DatabaseSettings)ConfigurationManager.GetSection("dataConfiguration"); 
     string configDefaultDatabase = string.Empty; 
     if (null != dataConfig) 
     { 
      configDefaultDatabase = dataConfig.DefaultDatabase; 

      if (!String.IsNullOrEmpty(configDefaultDatabase)) 
      { 
       ConnectionStringSettingsCollection connections = ConfigurationManager.ConnectionStrings; 
       if (null == connections[configDefaultDatabase]) 
       { 
        throw new ArgumentOutOfRangeException(
         string.Format(
          "Your dataConfiguration (DefaultDatabase) does not match any of your connection strings. DefaultDatabase='{0}'.", 
          configDefaultDatabase)); 
       } 
      } 
     } 
Cuestiones relacionadas