尝试获取数据库类型的实例时出现激活错误,键“”< - 空白

时间:2010-10-27 06:13:45

标签: c# unit-testing enterprise-library

我正在尝试使用Enterprise Library 5.0并在我的BL上进行一些单元测试,我是否需要在DL或Test项目上安装app.config?

注意:我的web项目上的web.config上已经有配置设置。

我如何使用DAAB:

private static Database db = DatabaseFactory.CreateDatabase();

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

我在DL上的app.config:

<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 个答案:

答案 0 :(得分:3)

添加其他原因。

我有一个引用Enterprise Library 5.0.xxxxx的VS2010解决方案/ csproj。

但是,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(或更高版本)下运行。

编辑:

由于没有定义正确的“DbProviderFactories”,我也遇到了这个错误。 我发布了一个我在此URL找到的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>

最后:

我收到此错误后,因为我没有与defaultDatabase值同名的ConnectionString(在配置文件中)。阿卡,简单的“麻木头骨”错误。

如果您愿意,可以将此安全阀代码放入(在您创建数据库之前)。

        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 :(得分:1)

这是由于GAC dll(程序集中的Dll)与应用程序引用的dll之间的dll不匹配所致。

从程序集中删除dll并尝试运行。

  1. 开始 - &gt;运行
  2. 类型汇编
  3. 删除发生激活错误的dll。
  4. 重置IIS
  5. 希望它能解决你的问题。

答案 2 :(得分:0)

我引用了错误的.dll副本。它现在有效。

答案 3 :(得分:0)

由于类库可以有app.config文件。当你使用EntLib 5.0&amp;想要访问类libarry中的连接字符串。因此,您需要将上面的配置添加到解决方案中使用的所有web.config文件中。例如,如果您有UI层,则Business(类库)和UI层之间的WCF层和Business层位于WCF服务和DAL(类库)之间。

在这里,每个UI层都有一个web.config文件。 WCF服务层,所以这两个web.config文件应该包含上面提到的设置。

答案 4 :(得分:0)

我有同样的问题,我通过将EntLib从5.0改为3.1来解决它

答案 5 :(得分:0)

确保您的服务器安装了MySQL .net连接器。在安装连接器之前,我遇到了同样的错误。 http://www.mysql.com/products/connector/

答案 6 :(得分:-2)

我能够通过在CreateDatabase调用中显式指定连接字符串的名称来修复DLL项目中的此错误,如下所示:

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

而不是

Database db = DatabaseFactory.CreateDatabase();