2010-07-26 39 views
1

我在L2E中使用3個簡單的表格,其目的非常簡單:用戶,用戶角色,角色。VS 2008中的實體設計器是否簡單破碎?

用戶與用戶ID(唯一標識符)列上引用的Users_Roles具有1:多關係。那時,角色與任何表格都沒有關係。我把所有3張表都帶到了設計師手中,這反映了用戶到Users_Roles的映射,而Roles則獨自一人。

實現角色應映射到許多多關係中的Users_Roles,我跳入管理工作室。我打了一個從角色到Users_Roles的關係並保存了它。然後,我跳回到VS,並在邏輯上做了下一個合乎邏輯的步驟 - 嘗試通過右鍵單擊「從數據庫更新模型」來更新實體模型。它在更新列表中顯示了所有三個表。更新後,視覺關係沒有改變。我試圖重新編譯,看是否進行了更改,但收到兩個錯誤只在行號不同:

 
Error 3 Error 3034: Problem in Mapping Fragments starting at lines 177, 192: 
        Two entities with possibly different keys are mapped to the 
        same row. Ensure these two mapping fragments map both ends 
        of the AssociationSet to the corresponding columns. 

C:*\Model1.edmx 178 15 MVCTestApp 

試圖將錯誤調試都無濟於事。最終感到沮喪,刪除了模型並重建了它。這種關係得到了認可,設計師得到了更新,生活也很好。

這不是我第一次想把外面的設計師帶到外面去埋葬它:無論如何,一個禮拜前我都很想刪除一張桌子,並且很快就學會了刪除桌子設計師只有將其從設計師處刪除;其映射停留。

所以,有幾個問題:

1)是這種行爲僅限於VS 2008?我將有2010不久,我希望的是,設計師按預期,

2)是可更換有其他工具內置的設計,實際上工作,

3)是有辦法從模型更新實際更新 - 也許一些技巧,我不知道除了刪除整個模型,因此失去了我手動設置的所有其他關係?

+0

據我所知,實體框架4.0(VS2010中可用)有很大的改進,儘管它在功能和成熟性方面仍然有點落後於nHibernate。 – 2010-07-26 15:54:42

回答

0

破碎?說它只識別某些數據庫模式模式更爲正確。

EF支持其他模式,但您需要自己編寫EDMX。如果您希望GUI Designer能夠讓所有的東西都適合您,您需要遵循它所採用的模式。

如果Users_Roles僅具有兩列,UserIdRoleId並且如果這些都FKS到它們各自的表,並且如果兩列一起是表的PK,然後映射表會在沒有任何工作的情況下出去吧。

否則,您必須研究EDMX格式並自行獲取映射。正如你發現的那樣,這很棘手。

+0

問題不在於映射。問題在於設計師本身在刷新時沒有正確更新映射。它只能正確識別映射,如果它們存在之前被添加到。EDMX;如果我添加表格,然後在MSSQL中更改它們的模式,新的映射(儘管是100%正確的)不被識別,並且我得到有問題的錯誤。 – 2010-07-26 18:09:29

+0

我明白所有這些。問題在於GUI設計器重新生成SSDL,但不是CSDL或MSL。它假定您可能想要保留您所做的任何定製。如果您實質性更改架構,則需要清除EDMX中映射架構的關聯。 – 2010-07-26 18:58:17

+0

感謝您的澄清 - 我現在正在學習CSDL和MSL的眼球,希望這將使未來的生活更輕鬆。 – 2010-07-29 17:00:04

相關問題