例如,我有以下DbContext類。多個DbContext類使用相同的連接字符串?
public class AppDbContext : DbContext {
...
}
public class LogDbContext : DbContext {
...
}
public class FooDbContext : DbContext {
...
}
如果命名AppDbContext
連接字符串是在App.Config
,我想其他的DbContext類共享相同的連接字符串AppDbContext
,我能不能把這個字符串「AppDbContext」作爲的LogDbContext
的ctor
參數和FooDbContext
。例如,
public class FooDbContext : DbContext {
public FooDbContext : base("AppDbContext") { }
}
它有任何副作用嗎?
更新2013年1月9日
試圖@ ShinH2S的建議,並幾歲後,我放棄了這種方式,並決定給予不同的DbContext派生類不同的ConnectionStrings和數據庫。我已嘗試a test project and put it on GitHub。如果實體框架檢測到數據庫方案發生更改,它會引發運行時異常,因爲AppDbContext
和FooDbContext
具有不同的架構。如果我將一個DropCreateDatabaseIfModelChanges
策略分配給兩個DbContext派生類,則其中一個將被刪除,因爲這些模型與另一個不同。
更新2017/10
這是一個老問題。在我的記憶中,EF6 and above versions
可以在同一遷移表中爲多個上下文具有不同的遷移歷史記錄。 我更喜歡this answer at SO。我大約2年沒有用C#編寫代碼。
如果這些XXXDbContext派生自'BaseDbContext',我該如何讓它們具有相同的連接字符串,以便它們使用相同的數據庫?我是否配置了一個名爲'BaseDbContext'的連接字符串,並且所有派生類都使用'BaseDbContext'進行連接? – AechoLiu
首先,在配置文件中創建一個名爲'BaseDbContext'的連接字符串。在你的'BaseDbContext'類中你創建了一個默認的構造函數:'public BaseDbContext():base(「BaseDbcontext」){}'。這就是你必須要做的。 – CodeNotFound
我需要嘗試一下。那些XXXDbContext不在同一個類庫中,而且我沒有像這樣創建表'public FooDbContext():base(「AppDbContext」)'。 – AechoLiu