我試圖用實體框架4使用MySQL(5.5.22,連接器6.5.4)。如何從MySQL數據庫更新實體框架模型?
我正在使用模型優先的方法。我成功地從我的模型中創建了一個SQL腳本。
現在我想修改我的數據庫,然後從修改過的數據庫更新我的模型(例如,我將一個新列添加到一個表中,並且我期待將一個新屬性添加到相應的實體中) 。 這種方法適用於SQL Server 2008 R2。
的MySQL,我不能讓它工作:更新嚮導總是顯示我目前的表(已經映射到實體)爲新表,並嘗試新的實體添加到模型代替更新當前實體。
也許有一些相關的old #48875 bug(CREATE 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
的與該表關聯的新實體。 Zone
和Zones
之間的映射被破壞,並且在Zone1
和Zones
之間建立了新的映射。
Zone
和Zone1
實體是相同的(完全相同的屬性,相同的主鍵等)。
我再試圖刪除我以前的所有實體,並更名爲我所有XXXX1
實體XXXX
(例如,我刪除了Zone
實體然後改名Zone1
到Zone
)。
然後我試着從數據庫中第二次更新:更新嚮導按預期工作(不需要創建新實體,只需要更新實體)。
然後我試圖重新生成模型的SQL腳本....它的工作......但後來我試圖從數據庫再次更新和問題回來......更新嚮導仍在嘗試添加新的實體。
編輯3
最後解決了該問題(感謝daryal)!問題是我的數據庫模式名稱未在模型屬性中指定......使用SQL Server時,它的值爲99%,但默認情況下不是這種情況。
從數據庫更新模型時,根據數據庫的實際模式名稱更新SSDL。
但是,在從模型中再次生成數據庫之後,使用錯誤的數據庫模式名稱代替好的數據庫模式名稱。這就是爲什麼在從數據庫重新更新時失敗的原因。
D'oh!
如果您接受從這些表中創建新實體,您可以注意到哪些差異?例如,如果您生成的表具有主鍵,那麼請注意。 – 2012-03-30 15:12:48
@vucetica請查看更新後的答案 – ken2k 2012-03-30 15:50:33