web-dev-qa-db-fra.com

Une erreur d'activation s'est produite lors de la tentative d'obtention d'une instance de type base de données, clé "" <- vierge

J'essaie l'Enterprise Library 5.0 et faisais des tests unitaires sur mon BL. Dois-je avoir un app.config sur le DL ou sur le projet Test?

remarque: j'ai déjà les paramètres de configuration sur mon web.config sur mon projet web.

comment j'utilise le DAAB:

private static Database db = DatabaseFactory.CreateDatabase();

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

mon app.config sur 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>
11
Martin Ongtangco

je faisais référence à la mauvaise copie .dll. ça fonctionne maintenant.

0
Martin Ongtangco

Pour ajouter à d'autres raisons.

J'avais une solution VS2010/csproj qui faisait référence à Enterprise Library 5.0.xxxxx.

Cependant, csproj a été défini sur "Target 3.5 Framework". Donc, je devais soit cibler le framework 4.0 OR que je descende à la version 3.5 de la bibliothèque d'entreprise.

J'ai été en mesure de mettre à jour mon environnement cible à 4.0, puis les erreurs ont disparu.

Voici ce que vous pouvez faire pour déterminer la version de l'infrastructure pour laquelle le code a été compilé: (mini script Powershell)

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

Si vous obtenez la version 2.0.50727, vous aurez du mal à vous lancer sous Framework 4.0 (ou supérieur).

MODIFIER:

J'ai aussi eu cette erreur en n'ayant pas défini le "DbProviderFactories" correct. Je publie une configuration MySql que j'ai trouvée à cette URL: (je la copie, au cas où l'URL mourrait à l'avenir)

(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>

Enfin:

Une fois, j'ai eu cette erreur parce que je n'avais pas de ConnectionString (dans le fichier de configuration) avec le même nom que la valeur defaultDatabase. Aka, l'erreur simple "crâne engourdi".

Vous pouvez insérer ce code de soupape de sécurité (juste avant de créer la base de données) si vous le souhaitez.

        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));
                }
            }
        }
3
granadaCoder

Cela est dû au déséquilibre des dll entre les dlls GAC (dll dans l’assemblée) et les dll référencées par l’application.

Supprimez les dll de l'assembly et essayez de courir.

  1. Démarrer -> Exécuter
  2. Type Assembly
  3. Supprimez la dll pour laquelle une erreur d'activation est en cours.
  4. Réinitialiser l'IIS

Espérons que cela résoudra votre problème.

1

J'ai le même problème et je le résous en changeant EntLib de 5.0 à 3.1

0

Assurez-vous que le connecteur MySQL .net est installé sur votre serveur. Je recevais la même erreur jusqu'à ce que j'ai installé le connecteur. http://www.mysql.com/products/connector/

0
BA TabNabber

Comme les bibliothèques de classes peuvent avoir un fichier app.config. Ce n'est vraiment pas utile lorsque vous utilisez EntLib 5.0 et souhaitez accéder à une chaîne de connexion dans la classe libarry. Par conséquent, vous devez ajouter la configuration ci-dessus à tous les fichiers web.config que vous utilisez dans votre solution. Par exemple, si vous avez une couche d'interface utilisateur, une couche WCF entre Business (bibliothèque de classes) et une couche d'interface utilisateur et la couche Business se situe entre le service WCF et le DAL (bibliothèque de classes).

Ici, vous aurez un fichier web.config dans chaque couche d'interface utilisateur et la couche de service WCF. Ces deux fichiers web.config doivent donc correspondre aux paramètres mentionnés ci-dessus.

0
Archana