2011-07-12 61 views
2

有了實體框架,我可以說,在相當高的堆棧設置哪個數據庫我想連接到,然後讓EF使用它的所有查詢?實體框架4是否支持多數據庫?

這不是每個模型都有不同數據庫的場景,而是所有模型都連接到同一個數據庫,但根據某些條件(例如URL或子域),此數據庫可能會有所不同, 。

如果是的話,這會對數據庫池等產生什麼影響?

回答

1

當您創建的ObjectContext,爲構造函數的參數是連接字符串:

http://msdn.microsoft.com/en-us/library/bb739017.aspx

應該有上池並無影響。

+0

是ObjectContext的東西是一個動作觸發之前全局設置,然後關閉?即每次請求我可以這樣做嗎? – codecompleting

+0

那麼,不應該跨線程共享對象上下文,並且通常應該具有較短的生命週期(每個工作單元)......然後將其丟棄。所以,是的,它是(連接字符串),可以爲每次創建ObjectContext時改變。 – Jeff

+0

因此創建它並銷燬它,並且頁面請求的開始/結束是安全的,那麼對嗎?最佳實踐? (如在執行動作之前/之後的MVC中) – codecompleting

1

是的,你可以做到這一點。這只是在創建ObjectContext時使用適當的連接字符串,它將您連接到要使用的數據庫。我們經常這樣做。

+0

但我假設完全相同的數據庫(-schema),而不是從MS-SQL切換到oracle? –

+2

正確。提供程序在編譯到程序集的SSDL中指定。如果您想要執行此切換,可以將edmx編譯操作更改爲複製到輸出文件夾,然後手動切換ssdl以在運行時使用不同的提供程序。更多這裏http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx – Jeff

1

每次使用DbContext時,只需在執行任何查詢之前更改connectionString即可。

例如,你可以簡單地改變初始目錄名稱:

YourDbContext.Database.Connection.ConnectionString = "data source=LAPKEVIN\\SQLKEVIN;Integrated Security=SSPI;Initial Catalog=YourDatabase";