在Entity Framework中的運行時更改連接字符串中的數據庫名稱

.net entity-framework runtime

在我的項目中,我想在使用EntityFramework的DAL層上運行一些單元測試。我是在每次測試運行之前從scrips創建一個新數據庫(為了在進行測試時始終使用相同的初始數據)。在測試結束時,將刪除此數據庫(所有這些都是在[ClassInitialize()]和[ClassCleanup()]屬性的幫助下自動完成的。

生成的數據庫總是有一個不同的名稱,如TestDB-2009-01-31--12-00-00,以免與我的同事的測試數據庫衝突。

我遇到的實際問題是我沒有找到告訴EntityFramework連接到生成的數據庫的方法(名稱是在運行時生成的)。現在它連接到app.config文件中指定的連接字符串,這當然是正常的。因為我正在進行這些測試,所以我正在尋找可以在DAL dll外部完成的事情(不直接在EF上下文中設置任何內容)。

任何幫助是極大的讚賞。

謝謝。

一般承認的答案

創建ObjectContext時,需要使用將ConnectionString作為參數的構造函數重載。

您可以使用EntityConnectionStringBuilder構建此ConnectionString。更具體地說,假設您的基礎數據庫是SQL Server,您可以使用SqlConnectionStringBuilder為EntityConnectionStringBuilder.ProviderConnectionString構建值。

下面是一些構建SQL Server連接字符串的代碼

var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "localhost";
scsb.InitialCatalog = "MyDB";
scsb.IntegratedSecurity = true;

這裡有一些構建Entity ConnectionString的代碼:

var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl";
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString = scsb.ConnectionString;


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因