2012-03-30 222 views
4

我試圖用實體框架4使用MySQL(5.5.22,連接器6.5.4)。如何從MySQL數據庫更新實體框架模型?

我正在使用模型優先的方法。我成功地從我的模型中創建了一個SQL腳本。

現在我想修改我的數據庫,然後從修改過的數據庫更新我的模型(例如,我將一個新列添加到一個表中,並且我期待將一個新屬性添加到相應的實體中) 。 這種方法適用於SQL Server 2008 R2

的MySQL,我不能讓它工作:更新嚮導總是顯示我目前的表(已經映射到實體)爲新表,並嘗試新的實體添加到模型代替更新當前實體。

enter image description here

也許有一些相關的old #48875 bugCREATE INDEX modifies the table name case):MySQL的力量我的表名是小寫,但這些表在MSL爲駝峯映射...

它實際上是可能的讓MySQL和Entity Framework在沒有所有這些問題的情況下一起工作?


編輯

如果它可以幫助,手動重命名錶時使用駱駝情況下

rename table mytable to mytable_bis 
rename table mytable_bis to MyTable 

它不工作得更好。


EDIT 2

如果接受從這些表創建新的實體,有什麼 差異,你可以注意到了嗎?例如,如果您生成的 表具有主鍵,那麼請注意。

當從現有表中接受在更新嚮導中添加新實體時,它創建的實體與名稱末尾的1一樣被調用。

例如,我目前有一個名爲Zone的簡單實體與名爲Zones的表關聯。在從數據庫更新之後,它會創建一個名爲Zone1的與該表關聯的新實體。 ZoneZones之間的映射被破壞,並且在Zone1Zones之間建立了新的映射。

ZoneZone1實體是相同的(完全相同的屬性,相同的主鍵等)。

我再試圖刪除我以前的所有實體,並更名爲我所有XXXX1實體XXXX(例如,我刪除了Zone實體然後改名Zone1Zone)。

然後我試着從數據庫中第二次更新:更新嚮導按預期工作(不需要創建新實體,只需要更新實體)。

然後我試圖重新生成模型的SQL腳本....它的工作......但後來我試圖從數據庫再次更新和問題回來......更新嚮導仍在嘗試添加新的實體。


編輯3

最後解決了該問題(感謝daryal)!問題是我的數據庫模式名稱未在模型屬性中指定......使用SQL Server時,它的值爲99%,但默認情況下不是這種情況。

從數據庫更新模型時,根據數據庫的實際模式名稱更新SSDL。

但是,在從模型中再次生成數據庫之後,使用錯誤的數據庫模式名稱代替好的數據庫模式名稱。這就是爲什麼在從數據庫重新更新時失敗的原因。

D'oh!

enter image description here

+0

如果您接受從這些表中創建新實體,您可以注意到哪些差異?例如,如果您生成的表具有主鍵,那麼請注意。 – 2012-03-30 15:12:48

+0

@vucetica請查看更新後的答案 – ken2k 2012-03-30 15:50:33

回答

3

首先我要說,這是不是一個直接的答案;但可能會指導您解決問題。 首先使用xml編輯器打開edmx文件(右鍵單擊edmx文件並選擇打開)。在edmx文件中有一些與object-db映射相關的部分,其中三個非常重要。有ConceptualModels,StorageModels和映射節點。在存儲節點,檢查表的名稱是否正確:

<EntitySet Name="MasterSet" EntityType="Model1.Store.MasterSet" store:Type="Tables" Schema="dbo" /> 

如果表名是不正確的,只是改變他們,並更新相關數據的映射部分。

+0

感謝您的回答,我發現問題所在。我檢查了SSDL,表格名稱一切正常......但模式是'dbo',而不是我真正的模式名稱......查看更新的問題以獲取完整的如何解決問題的詳細信息。爲你50榮譽,謝謝! (編輯:我現在不能給你那50分,我得等20個小時;)) – ken2k 2012-04-03 15:13:48

+0

很高興幫助你,其實你解決了這個問題,我有協助。 – daryal 2012-04-03 15:27:38

+1

這非常有幫助,謝謝!我一直在編輯edmxfiles這個問題的數週。 – 2016-04-24 19:45:45