2012-02-14 125 views
2

我正在開發一個應用程序,它將客戶端數據隔離到MS SQL Server 2008中的不同架構中。每個架構的表結構都是相同的。 Entity Framework 4.1將用於訪問數據,每個客戶端使用不同的連接字符串。連接字符串中的用戶設置爲使用數據庫中的特定模式,這不是問題。實體框架更改每個連接的架構名稱

我遇到的問題是查詢中的模式名稱在EDMX中硬編碼。如果我從.edmx中的每個實體中刪除模式名稱,那麼.NET將使用EntityContainer名稱。如何才能改變每個連接的模式名稱? 我正在使用通用的DbContext來爲每個請求提供的連接字符串進行連接。

我試過了codeplex上的布蘭登海恩斯EF ModelAdapter,但這似乎不適用於最新版本的EF。任何幫助表示讚賞!

回答

2

用EDMX + DbContext解決這個問題可能會很困難,因爲唯一的方法是爲每個模式分別建立SSDL。 SSDL是EDMX文件的一部分,它是定義所有表格的部分,包括其模式的名稱。您可以在運行時更改SSDL(默認情況下,XML是存儲爲程序集資源的XML),但您必須爲每個模式手動創建MetadataWorkspace,使用它創建EntityConnection並將連接傳遞給上下文構造函數。如果你想使用它,你將不得不使用ObjectContext API(.NET 4.0)而不是DbContext API。

如果您轉移到代碼映射(沒有EDMX,但流暢的API用於描述映射),將可能實現它,因爲您將能夠參數化您的單個映射集並使用多個DbModel實例(每個模式一個)。