8

実行時にエンタープライズライブラリのデータベースオブジェクトの接続文字列を変更する方法はありますか?このリンクを見つけましたが、少し古くなっています(2005)

私もこれを見つけましが、それは一般的に.Netに当てはまるようです。私は、EntLibのために特別にできることがあるかどうか疑問に思いました。

DatabaseFactoryオブジェクトのCreateDatabase()メソッドに接続文字列名を渡したところ、プロジェクトマネージャーから複数のデータベースインスタンスをサポートするように求められた昨日まで機能していました。状態ごとに1つのデータベース(CA用に1つ、FL用に1つなど)が必要になることがあるため、ソフトウェアはすべてのデータベースを循環してデータを処理する必要がありますが、同じ構成ファイルを使用します。

前もって感謝します。

4

4 に答える 4

14

これを見てください:接続文字列だけで Microsoft.practices.EnterpriseLibrary データベースを開きます

この次のコードを使用するだけで、実行時にデータベースを作成するプログラミングを行うことができます

database mydb = new EnterpriseLibrary.Data.Sql.SqlDatabase("connection string here");

それは私の問題を解決しました。異なるデータベースに接続する URL の異なるサブドメインに従って、多くのデータベースを使用する単一の Web アプリがあります。そのような:

  • abc.test.com ------>Db_projectABC の使用
  • def.test.com ------>db_ProjectDEF の使用

url-rewrite を使用してサブドメイン名を解析し、サブドメイン名を使用して、メイン データベースに格納されているデータベース接続文字列を選択します。

ありがとう

于 2011-03-17T02:40:18.210 に答える
3

エンタープライズ ライブラリ ドキュメント - アプリケーション コードの追加」を見ると、次のように書かれています。

「作成するデータベースの接続文字列がわかっている場合は、アプリケーションの構成情報をバイパスし、コンストラクターを使用してデータベース オブジェクトを直接作成できます。データベース クラスは抽象基本クラスであるため、その派生クラスの 1 つを構築する必要があります。型。派生したデータベース型によって、ADO.NET データ プロバイダが決まります。たとえば、SqlDatabase クラスは SqlClientFactory プロバイダを使用し、SqlCeDatabase クラスは SqlCeProviderFactory プロバイダを使用し、OracleDatabase クラスは OracleClientFactory プロバイダを使用します。適切な接続文字列のデータベース クラスのタイプです。」

次に、いくつかの例を示します。これは、DatabaseFactory を使用するべきではなく、異なる接続ごとに新しい Database クラスを作成する必要があることを示唆しています。

于 2008-12-03T11:02:09.293 に答える
3

次のコード スニペットを使用して、複数のデータベースに接続できます。

参照として追加する DLL

  1. Microsoft.Practices.EnterpriseLibrary.Common.dll
  2. Microsoft.Practices.EnterpriseLibrary.Data.dll
  3. Microsoft.Practices.ServiceLocation.dll

スニペット:

var builder = new ConfigurationSourceBuilder();

        builder.ConfigureData()
               .ForDatabaseNamed("LocalSqlServer1")
                 .ThatIs.ASqlDatabase()
                 .WithConnectionString(@"Data Source=PCNAME\SQLEXPRESS;Initial Catalog=ContactDB;Integrated Security=True")
               .ForDatabaseNamed("LocalSqlServer2")
                 .ThatIs.ASqlDatabase()
                 .WithConnectionString(@"Data Source=PCNAME\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True");

        var configSource = new DictionaryConfigurationSource();
        builder.UpdateConfigurationWithReplace(configSource);

Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);      

Database destinationDatabase = DatabaseFactory.CreateDatabase("LocalSqlServer2");      
于 2014-02-19T07:30:49.347 に答える
2

これがヤンのネットゾーンからです:

using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data.Configuration;

DatabaseSettings settings = new DatabaseSettings();

// This maps to <databaseType> element in data config file
DatabaseTypeData type = new DatabaseTypeData("Sql Server", "Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase, Microsoft.Practices.EnterpriseLibrary.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
settings.DatabaseTypes.Add(type);

// This maps to <connectionString> element in data config file
ConnectionStringData connectionString = new ConnectionStringData("localhost.EntLibQuickStarts");

// Followings map to <parameter> elements in data config file
ParameterData param = new ParameterData("server", "localhost");
connectionString.Parameters.Add(param);

param = new ParameterData("database", "EntLibQuickStarts");
connectionString.Parameters.Add(param);

param = new ParameterData("integrated security", "true");
connectionString.Parameters.Add(param);

settings.ConnectionStrings.Add(connectionString);

// Too bad compiler gets confused InstanceData with System.Diagnostics.InstanceData.  It maps to <instance> element in data config file
Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData instance = new    Microsoft.Practices.EnterpriseLibrary.Data.Configuration.InstanceData("localhost", "Sql Server", "localhost.EntLibQuickStarts");
settings.Instances.Add(instance);

ConfigurationDictionary configurations = new ConfigurationDictionary();

// This is how to tie DatabaseSettings with ConfigurationDictionary. It maps to <configurationSection name="dataConfiguration"> element in App.config file    configurations.Add("dataConfiguration", settings);
ConfigurationContext context = ConfigurationManager.CreateContext(configurations);

Database database = new DatabaseProviderFactory(context).CreateDatabase("localhost");
于 2010-01-08T15:01:33.610 に答える