EF 6對數據庫的上下文,DbContext
基類,有幾個重載 - 其中之一需要一個DbConnection
和布爾標誌,指示如果前面提到的DbConnection
對象應該被設置當所述上下文被設置(IOW如果真當佈置上下文時佈置DbConnection
)。你也可以使用構造函數重載,它只需要一個連接字符串,但我想拋出一個例子來說明如何在控制DbConnection
對象的生命週期的時候這樣做。
當您的特定上下文被生成時,缺省情況下只有默認的(public/parameterless)構造函數可用,如果您查看生成的類,則會使用基於配置文件的EF連接字符串條目。好處是您從DbContext
繼承的生成上下文遵循使用部分修飾符生成您的上下文類的最佳實踐,這允許您創建自己的partial
實現您的特定模型的上下文。
我會建議建立在你的項目中的新類文件(明確不是生成的代碼文件),並在最低限度,使partial
實現模型的上下文類的只具有DbConnection
和bool
參數的構造以反映前面提到的DbContext
構造函數簽名。
例如,如果產生的上下文的定義是:
public partial class MyModelContainer : DbContext...
,那麼你可以創建你的局部類實現(當然你有光澤,新的,獨立的類文件):
public partial class MyModelContainer
{
public MyModelContainer(DbConnection dbConnection, bool contextOwnsConnection)
: base(dbConnection, contextOwnsConnection)
{
// you can other stuff here if you need to, but don't have to for this example
}
}
如果您已經掌握了這一點,則應該可以創建MyModelContainer
數據庫連接的對象,與您提供的DbConnection
對象使用的連接字符串一樣動態。
例如:
public void DynamicConnectionExample(string entityConnectionString)
{
DbConnection dbConnection = new EntityConnection(entityConnectionString);
bool shouldImplicitlyDisposeOfConnection = true;
using (var ctx = new MyModelContext(dbConnection, shouldImplicitlyDisposeOfConnection))
{
// do stuff...
}
}
很明顯,你可以得到一個小的創意與方法來配置的DbConnection對象的連接字符串,我會建議做探索比示例中所示的方式,使其他的方式。
另外值得注意的是:取決於你使用的是模型優先還是代碼優先,將會對你使用的DbConnection
的專用類型產生影響。例如,如果您使用EF模型,則會使用EntityConnection
對象,因爲您需要訪問程序集中的元數據編譯資源。
裁判:http://msdn.microsoft.com/en-us/library/gg696604(v=vs.113).aspx
我覺得有一個的DbContext構造函數,它允許你輸入一個連接字符串。 – TGlatzer
看看這個http://stackoverflow.com/questions/4805094/pass-connection-string-to-code-first-dbcontext –
我想你需要傳遞配置文件中的連接字符串的名稱,但連接字符串本身。 –