2009-03-04 60 views
6

In Linq2Sql you can connect a data context to multiple databases by just adding the database name to the source跨多個數據庫的ADO.Net實體框架

有沒有辦法在Linq 2實體/ ADO.net實體框架中實現這一點?數據庫名稱可以添加到表名中嗎?

我試圖從DBO的 '模式' 改變爲MyDatabase.dbo,但EF封裝此成

SELECT FROM [MyDatabase.dbo].[MyTable] 

詭計像改變 '模式' 至'MyDatabase的]。[DBO'將逃進

SELECT FROM [MyDatabase]].[dbo].[MyTable] 

(介意兩個]]

回答

8

首先,this isn't officially supported

您鏈接到LINQ to SQL的答案只是使用數據庫服務器執行異構查詢的能力。我不明白爲什麼這對Entity Framework不起作用,因爲它是數據庫服務器功能,而不是任一框架的功能。換句話說,LINQ to SQL仍在處理連接,就好像只涉及一個數據庫服務器一樣。但請記住,並非所有數據庫服務器都可以這樣做。

至於要在EDMX中更改什麼,請在「SSDL內容」部分中查找EntitySet節點的Schema屬性。

有關此技術的一個警告是,當您從數據庫更新模型時,存儲模型將被清除並從頭開始替換。所以你需要重新應用這些改變。這在LINQ to SQL中不是問題,因爲LINQ to SQL根本不支持數據庫的自動更新。

更好的選擇可能是在數據庫中創建一個引用另一個數據庫的VIEW並映射該視圖,而不是直接映射表和其他數據庫。

+0

該視圖只有在每個數據庫位於同一個數據庫服務器上的情況下才能正常工作,否則您要跨數據庫。在sql 2005+中,我相信一個同義詞也可以工作,但我不是100%。 至於丟失的變化,如果您停止使用設計,並且手動編輯了四個文件,這就不再成爲問題。 – NikolaiDante 2009-03-04 13:15:11

1

如果您的數據庫支持SQL同義詞,則可以將兩個數據庫定義合併到一個文件中。我最近做了這個,併發布了我如何做的here,如果你有興趣。

基本上,您在databaseA上創建指向databaseB的同義詞,爲每個數據庫創建單獨的edmx文件,然後運行腳本將edmx文件合併到單個文件中,該文件連接到具有同義詞設置的任何一個數據庫。