2013-01-08 75 views
3

例如,我有以下DbContext類。多個DbContext類使用相同的連接字符串?

public class AppDbContext : DbContext { 
    ... 
} 
public class LogDbContext : DbContext { 
    ... 
} 
public class FooDbContext : DbContext { 
    ... 
} 

如果命名AppDbContext連接字符串是在App.Config,我想其他的DbContext類共享相同的連接字符串AppDbContext,我能不能把這個字符串「AppDbContext」作爲的LogDbContextctor參數和FooDbContext。例如,

public class FooDbContext : DbContext { 
    public FooDbContext : base("AppDbContext") { } 
} 

它有任何副作用嗎?

更新2013年1月9日

試圖@ ShinH2S的建議,並幾歲後,我放棄了這種方式,並決定給予不同的DbContext派生類不同的ConnectionStrings和數據庫。我已嘗試a test project and put it on GitHub。如果實體框架檢測到數據庫方案發生更改,它會引發運行時異常,因爲AppDbContextFooDbContext具有不同的架構。如果我將一個DropCreateDatabaseIfModelChanges策略分配給兩個DbContext派生類,則其中一個將被刪除,因爲這些模型與另一個不同。

更新2017/10

這是一個老問題。在我的記憶中,EF6 and above versions可以在同一遷移表中爲多個上下文具有不同的遷移歷史記錄。 我更喜歡this answer at SO。我大約2年沒有用C#編寫代碼。

回答

4

恕我直言,沒有副作用。但如果是我,我將創建一個繼承自DbContext類的基類,然後所有上下文(AppDbContext,LogDbContextFooDbContext)將從BaseDbContext派生。

+0

如果這些XXXDbContext派生自'BaseDbContext',我該如何讓它們具有相同的連接字符串,以便它們使用相同的數據庫?我是否配置了一個名爲'BaseDbContext'的連接字符串,並且所有派生類都使用'BaseDbContext'進行連接? – AechoLiu

+1

首先,在配置文件中創建一個名爲'BaseDbContext'的連接字符串。在你的'BaseDbContext'類中你創建了一個默認的構造函數:'public BaseDbContext():base(「BaseDbcontext」){}'。這就是你必須要做的。 – CodeNotFound

+0

我需要嘗試一下。那些XXXDbContext不在同一個類庫中,而且我沒有像這樣創建表'public FooDbContext():base(「AppDbContext」)'。 – AechoLiu

相關問題