Enterprise Library 5.0を試していて、BLでいくつかの単体テストを行っていましたが、DLまたはテストプロジェクトに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>
間違った.dllコピーを参照していました。今は動作します。
他の理由に追加するため。
Enterprise Library5.0.xxxxxを参照しているVS2010ソリューション/ csprojがありました。
ただし、csprojは「Target3.5Framework」に設定されていました。したがって、4.0フレームワークをターゲットにする必要がありましたORエンタープライズライブラリの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));
}
}
}
これは、GAC dll(アセンブリ内のDLL)とアプリケーションによって参照されるdllの間のdllの不一致が原因です。
アセンブリからdllを削除して、実行してみてください。
うまくいけば、それはあなたの問題を解決するでしょう。
同じ問題があり、EntLibを5.0から3.1に変更することで解決します
サーバーにMySQL.netコネクタがインストールされていることを確認してください。コネクタをインストールするまで、同じエラーが発生していました。 http://www.mysql.com/products/connector/
クラスライブラリはapp.configファイルを持つことができます。 EntLib 5.0を使用していて、libarryクラスの接続文字列にアクセスしたい場合は、実際には役に立ちません。したがって、ソリューションで使用しているすべてのweb.configファイルに上記の構成を追加する必要があります。たとえば、UIレイヤーがある場合、Business(クラスライブラリ)とUIレイヤーの間にWCFレイヤーがあり、BusinessレイヤーがWCFサービスとDAL(クラスライブラリ)の間にあります。
ここでは、各UIレイヤーとWCFサービスレイヤーに1つのweb.configファイルがあるため、これら2つのweb.configファイルで上記の設定を組み合わせる必要があります。