2008-11-28 35 views
8

Có cách nào để thay đổi chuỗi kết nối của đối tượng DataBase trong Thư viện doanh nghiệp khi chạy không? Tôi đã tìm thấy liên kết this nhưng có một chút lỗi thời (2005)Thay đổi chuỗi kết nối khi chạy trong Thư viện doanh nghiệp

Tôi cũng đã tìm thấy this nhưng dường như áp dụng cho .Net nói chung, tôi đã tự hỏi liệu có điều gì đó có thể được thực hiện cụ thể cho EntLib hay không .

Tôi vừa chuyển tên chuỗi kết nối tới phương thức CreateDatabase() trong đối tượng DatabaseFactory và đã làm việc đến ngày hôm qua rằng người quản lý dự án của tôi đã yêu cầu tôi hỗ trợ nhiều hơn một cá thể cơ sở dữ liệu. Nó xảy ra rằng chúng ta phải có một cơ sở dữ liệu cho mỗi tiểu bang (một cho CA, một cho FL, vv ...) vì vậy phần mềm của tôi cần phải chu kỳ thông qua tất cả các cơ sở dữ liệu và làm một cái gì đó với dữ liệu nhưng nó sẽ sử dụng cùng một tập tin cấu hình.

Xin cảm ơn trước.

Trả lời

3

Nếu bạn có một cái nhìn tại "Enterprise Library Docs - Adding Application Code" nó nói này:

"Nếu bạn biết chuỗi kết nối cho cơ sở dữ liệu mà bạn muốn tạo, bạn có thể bỏ qua thông tin cấu hình của ứng dụng và sử dụng một hàm tạo để tạo trực tiếp đối tượng cơ sở dữ liệu Vì lớp cơ sở dữ liệu là lớp cơ sở trừu tượng, bạn phải xây dựng một trong các loại bắt nguồn .xác định nhà cung cấp dữ liệu ADO.NET. Ví dụ, lớp SqlDatabase sử dụng các nhà cung cấp SqlClientFactory, lớp SqlCeDatabase sử dụng các nhà cung cấp SqlCeProviderFactory , và OracleDatabase lớp sử dụng các nhà cung cấp OracleClientFactory . Đó là bạn có trách nhiệm xây dựng các loại thích hợp của lớp cơ sở dữ liệu cho chuỗi kết nối."

Sau đó nó tiếp tục đưa ra một số ví dụ. Điều này sẽ gợi ý rằng bạn không nên sử dụng các DatabaseFactory và bạn nên được tạo ra một lớp cơ sở dữ liệu mới cho mỗi kết nối khác nhau của bạn

2

Dưới đây là từ Khu Net Yang của:.

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"); 
13

nhìn lúc này: Open Microsoft.practices.EnterpriseLibrary database with just a connection string

chỉ sử dụng mã sau đây, bạn có thể lập trình tạo ra cơ sở dữ liệu trong thời gian chạy

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

Nó giải quyết vấn đề của tôi. Tôi có một ứng dụng web duy nhất sử dụng nhiều cơ sở dữ liệu, theo tên miền phụ khác trong url để kết nối với cơ sở dữ liệu khác. như:

  • abc.test.com ------> sử dụng Db_projectABC
  • def.test.com ------> sử dụng db_ProjectDEF

Tôi sử dụng url viết lại để phân tích tên miền phụ và sử dụng tên miền phụ để chọn chuỗi kết nối cơ sở dữ liệu được lưu trữ trong cơ sở dữ liệu chính.

Cảm ơn

+0

Tuyệt vời giải quyết vấn đề lớn của tôi nhờ @bentz –

1

Chúng tôi có thể sử dụng đoạn mã sau để kết nối với nhiều cơ sở dữ liệu.

DLL để Thêm vào làm tham khảo

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

Đoạn mã:

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");  
+1

đạn và mã không chơi độc đáo với nhau, cần một số văn bản ở giữa để thực sự định dạng :-) – kleopatra

Các vấn đề liên quan