4

中添加多個oracle架構我有一個嚴重的問題需要解決。在visual studio 2013和EF

在我的VS2013服務器資源管理器中,我使用有效的用戶和密碼憑據建立了與數據庫的連接。

因此,我有一個名爲Connect1的模式,它需要訪問另一個名爲Connect2的模式,這兩個模式都使用相同的數據源名稱:Dev1。我與之連接的用戶名爲Connect1,因此默認情況下我已連接到架構Connect1。我能夠驗證我是否具有此用戶的連接到Connect2的訪問權限。

使用ODP.NET託管驅動程序,我能夠設置它。把所有的連接細節。

配置顯示在這個頁面:

Using Oracle Developer Tools for Visual Studio

爲了讓模式來看待,我不得不改變過濾器選項卡,並添加所有我使用了相關的架構(添加CONNECT2)。然後我點擊更新,我可以將這些表格放入我的edmx文件中。

但是,當我關閉Visual Studios時會出現問題。我的過濾器會丟失,並且我的連接恢復爲僅使用Connect1。

這就破壞了我的表映射在我的EDMX文件用一系列

錯誤11007的:沒有映射

這真是令人沮喪,因爲我必須不斷重複的實體類型「表1」一遍又一遍的手動重新映射我所有的表。

令人困惑的是,當我從服務器資源管理器更新數據連接以包含第二個模式時。EF工作並檢測表;但我的應用程序配置和連接字符串沒有改變。因此,這讓我相信,如果我要將我的項目推廣到生產或測試,那麼它會中斷,因爲我的項目中沒有任何內容表明需要Connect2。

回答

6

好吧,我意識到這個從未解釋過的大錯誤。如果您想要使用EF和Oracle,並且您正在使用其他模式,我強烈建議大家遵循這一點。

問題在於,自從我們將Oracle的模式約定引入到EDMX以來,沒有辦法知道映射會變得多麼不穩定。這對於微軟來說從未成爲問題的原因是因爲在SQL服務器中沒有這樣的模式。要在同一個edmx文件中實現兩個數據庫,有一些可見的預防措施會阻止您添加任何表。在我們引入模式之後,它變得非常脆弱。

所以你需要做的是按照添加架構的步驟(正如我在問題中解釋的)。轉到過濾器選項卡,以這種方式添加模式,然後單擊更新按鈕。

一旦將其應用於服務器資源管理器,edmx將有權從該模式添加表。當你這樣做的時候,EDMX已經回憶了嵌入在其文件中的模式。因此,如果您曾經關閉過視覺工作室,然後重新打開並運行該項目,它仍然可以工作。

以下是您想要避免的幾個提示: 儘管它使您的代碼更具可讀性,但不要重命名任何實體和列(屬性)。這是第一個哦 - 哦。由於映射非常不穩定,如果您碰巧搞砸了,重新映射所有內容將會很麻煩。

第二個uh-oh,是當你關閉Visual Studios時,重新打開它,忘記在服務器資源管理器中重新包含你的模式,轉到edmx並執行「從數據庫更新模型」以包含任何其他內容(但最重要的是即使你不做任何事情)並且你點擊確定,你的模型仍然會更新,不管是否有更改,都會丟失先前所做的所有映射。這就是我所說的地圖是不穩定的。

在這種情況下,你沒有做的第一嗯,哦重命名實體或屬性的..是刪除所有的實體已經存在,並重新添加。

爲什麼要刪除所有實體的原因是因爲添加新的具有相同名稱將添加一個新的實體,具有相同名稱+一個數字。因此,類似Customer的實體仍然存在,再次添加實體將創建一個名爲Customer1的新實體。

感嘆。

+0

順便說一句,我花了3小時,周圍的工作做觀。視圖會帶來一個鏈接表,因此在Schema1中,我的視圖將創建視圖Customer作爲來自Schema2.Customer的select *。我會爲所有實體做到這一點。這是一個只讀的問題。您將無法通過EF進行任何插入或更新,就像您將包含實際實體一樣。 – sksallaj

+0

您也不能先在ODP.NET中執行代碼,因爲這不受支持。 – sksallaj

+0

你有沒有在這個問題上找到更多。我們面臨同樣的問題,並有很多開發人員。正如你在我的初始簽入後提到的,除非我們重新創建連接字符串,否則它不起作用。事件發生後,「實體未映射」錯誤。要求每個人刪除和讀取表格將是噩夢。 – skjagini