簡體   English   中英

實體框架與來自不同數據庫的相同表名沖突

[英]Entity Framework conflict with same table name from different databases

我在Visual Studio 2012(C#)中使用Entity Framework 4和MVC 3。

使用數據庫 ; 有兩個獨立的數據庫,每個數據庫都有自己的命名空間和兩個獨立的edmx文件。 每個數據庫都有一個具有相同名稱和字段(但內容不同)的表。 當我添加第二個表時,我開始遇到編譯錯誤。

Ambiguity between 'Interface.CodeFormStatus.FormStatusCodeID' 
and 'Interface.CodeFormStatus.FormStatusCodeID' 

似乎有一些復雜的解決方法,或者我可以重命名其中一個表。 是不是一個簡單的解決方案,因為這必須是一個相當普遍的問題。

我遇到了一個情況,我有兩個數據庫(一個是另一個的舊版本),我需要將它們集成到一個項目中。 當然,幾乎每個名字都有沖突。

我為每個數據庫創建了兩個獨立的edmx文件,為了清楚起見,將每個文件放在自己的命名空間中。 然后,我編輯了每個實體名稱以反映它來自哪個數據庫 - (例如,“活動”,兩者都成為“v13Activities”和“v14Activities”)。

對於要在兩個數據庫之間進行鏡像的操作,我編寫了一個包含兩個上下文的包裝器。 這使我的代碼重復性降低,同步問題也減少了。

希望這種方法可以幫助其他人 - 這似乎是一個模糊的問題,這個答案是谷歌的最佳結果之一!

更新:在EF 6.1+中,還有另一種解決方案。 您可以使用“沖突”名稱,並在使用“Code First From Database”選項時使用簡單的命名空間將它們分開。 我將提倡這個解決方案,因為舊的XML .edmx風格將從EF Core開始逐步淘汰

這對我有用。 只需單擊設計器中的表(圖形版本而不是代碼)然后在“名稱”屬性旁邊的屬性中,您可以將名稱更改為不同的名稱。 這只會更改設計器中的名稱,並在整個應用程序中將其用作別名。

如果您沒有多個具有相同名稱的表,則可以在designer(您的.edmx文件)中編輯實體名稱。 因此,只需雙擊一個CodeFormStatus實體的名稱並使其不同(例如,將其更改為CodeFormStatusOther

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM