由於程式必須在測試資料庫跟正式資料庫之間做切換,在使用Entity Framework 6連資料庫時,怎樣才可以切換資料庫連線字串呢?
在此使用Database first模式開發Entity Framework 6程式,
首先創造一個實體資料模型檔,名稱為Model1.edmx,
在Model1.edmx內的Model1.Context.cs檔案內,
可以找到DbContext的建構函式如下圖(圖片用新分頁開啟會比較大):
預設的DbContext建構式無法傳入連線字串,
因此,必須自行再多載一個同名的建構函式,改成可以傳入連線字串,
但是不可以在這個檔案直接新增程式碼,
因為這個檔案是由Entity Framework自動產生的,
所以要新增一個.cs檔,用partial class的方式加入多載的建構函式如下:
接著在App.Config檔中找到連線字串如下圖,
圖中名為「DemoDbContext」是預設產生的連線字串,
複製此連線字串並修改名稱為「TestDemoDbContext」(作為測試機的連線字串)
以及修改連線字串裡的data source、initial catalog、user id、password...等資料。
之後再撰寫切換連線字串的程式碼即可,程式碼如下:
public partial class Form1 : Form
{
//在此切換連線字串
ConnectionSelecter _ConnectionSelecter = ConnectionSelecter.Test;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
using (DemoDbContext mydb = CreateDbContext(_ConnectionSelecter))
{
//取得資料庫資料(GauItems是資料庫資料表的名稱)
var query = mydb.GauItems.Select(s => s);
//資料放入dataGridView內顯示出來
this.dataGridView1.DataSource = query.ToList();
}
}
private DemoDbContext CreateDbContext(ConnectionSelecter connectionSelecter)
{
switch (connectionSelecter)
{
//測試機連線
case ConnectionSelecter.Test:
return new DemoDbContext("name=TestDemoDbContext");
//正式機連線
case ConnectionSelecter.Client:
return new DemoDbContext();
//預設為正式機連線
default:
return new DemoDbContext();
}
}
}
public enum ConnectionSelecter
{
/// <summary>
/// 測試機
/// </summary>
Test,
/// <summary>
/// 正式機
/// </summary>
Client
}
到此完成切換連線字串。
若需要將連線字串加密,可以參考「黑暗執行緒:為EF連線字串加密的簡單範例」。