Произошла ошибка активации при попытке получить экземпляр типа База данных, ключ "" <- пусто - PullRequest
11 голосов
/ 27 октября 2010

Я пробую Enterprise Library 5.0 и проводил некоторые модульные тесты на моем BL, мне нужно иметь app.config на DL или на тестовом проекте?

примечание: яуже есть параметры конфигурации в моем web.config в моем веб-проекте.

как я использую DAAB:

private static Database db = DatabaseFactory.CreateDatabase();

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

мой app.configDL:

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

Ответы [ 7 ]

3 голосов
/ 07 сентября 2013

Добавить к другим причинам.

У меня было решение VS2010 / csproj, которое ссылалось на Enterprise Library 5.0.xxxxx.

Однако csproj был установлен на «Target 3.5 Framework». Таким образом, мне нужно было либо ориентироваться на платформу 4.0, либо перейти на версию 3.5 библиотеки предприятия.

Мне удалось обновить целевую платформу до 4.0, а затем ошибки исчезли.

Вот что вы можете сделать, чтобы выяснить, для какой версии фреймворка был скомпилирован код: (Мини-сценарий Powershell)

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

Если вы получите v2.0.50727, у вас возникнут проблемы при работе в Framework 4.0 (или выше).

EDIT:

Я также получил эту ошибку из-за отсутствия правильного определения «DbProviderFactories». Я публикую конфигурацию MySql, найденную по этому адресу: (Я копирую его на случай, если URL-адрес умрет в будущем)

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>

И наконец:

Однажды я получил эту ошибку, потому что у меня не было ConnectionString (в файле конфигурации) с тем же именем, что и значение defaultDatabase. Ака, простая ошибка "онемение черепа".

Вы можете ввести этот код предохранительного клапана (непосредственно перед созданием базы данных), если хотите.

        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));
                }
            }
        }
1 голос
/ 07 ноября 2012

Это происходит из-за несоответствия dll между dll GAC (dll в сборке) и dll, указанными приложением.

Удалите dll из сборки и попробуйте выполнить.

  1. Пуск -> Выполнить
  2. Тип сборки
  3. Удалите DLL, для которой происходит ошибка активации.
  4. Сброс IIS

Надеюсь, это решит вашу проблему.

0 голосов
/ 25 февраля 2015

Убедитесь, что на вашем сервере установлен коннектор MySQL .net. Я получал ту же ошибку, пока не установил разъем. http://www.mysql.com/products/connector/

0 голосов
/ 30 августа 2013

У меня та же проблема, и я решаю ее, изменив EntLib с 5.0 на 3.1

0 голосов
/ 03 августа 2011

Мне удалось исправить эту ошибку в моем проекте DLL, указав имя строки подключения в явном виде в вызове CreateDatabase, например так:

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

вместо

Database db = DatabaseFactory.CreateDatabase();
0 голосов
/ 21 апреля 2011

Поскольку библиотеки классов могут иметь файл app.config.Это действительно бесполезно, когда вы используете EntLib 5.0 и хотите получить доступ к строке подключения в классе libarry.Следовательно, вам нужно добавить вышеуказанную конфигурацию ко всем файлам web.config, которые вы используете в своем решении.Например, если у вас есть уровень пользовательского интерфейса, уровень WCF между бизнесом (библиотека классов) и уровнем пользовательского интерфейса и бизнес-уровень находится между сервисом WCF и DAL (библиотека классов).

Здесь у вас будет один веб.Конфигурационный файл в каждом слое пользовательского интерфейса и слое сервиса WCF, поэтому эти два файла web.config должны соответствовать вышеупомянутым настройкам.

0 голосов
/ 28 октября 2010

Я ссылался на неправильную копию .dll.это работает сейчас.

...