我安裝了VS SP1,並使用實體框架進行遊戲。更新實體框架中的數據庫模式
我從現有的數據庫創建了一個模式,並嘗試了一些基本的操作。
除了數據庫模式更新,大部分情況都很好。
我在每一個基本方式更改的數據庫:
- 增加了一個新的表
- 刪除表
- 增加了一個新的列到現有的表
- 從現有表中刪除列
- 更改了現有列的類型
前三個進展順利,但類型更改和列刪除未遵循數據庫更改。
有沒有什麼辦法可以讓設計師的作品?或者目前不支持?我還沒有找到任何相關材料,但仍在搜索。
我安裝了VS SP1,並使用實體框架進行遊戲。更新實體框架中的數據庫模式
我從現有的數據庫創建了一個模式,並嘗試了一些基本的操作。
除了數據庫模式更新,大部分情況都很好。
我在每一個基本方式更改的數據庫:
前三個進展順利,但類型更改和列刪除未遵循數據庫更改。
有沒有什麼辦法可以讓設計師的作品?或者目前不支持?我還沒有找到任何相關材料,但仍在搜索。
我猜想可能這些不會發生,因爲他們會破壞現有代碼的構建,但這只是我的一個猜測。
這裏是我的邏輯:
首先,EF應該是超過1:1的映射表,所以它很可能只是因爲你是從表A中刪除列並不意味着該實體,不應該有一個屬性說明。您可能只需將該屬性映射到另一個表。
其次,更改類型可能會破壞構建。那是那裏唯一的理由。
更改類型可能會破壞構建,但在現實世界的應用程序中發生。 RoR或Django具有極低的摩擦程序。要處理「中斷」,您需要創建數據遷移。如果EF沒有,那麼有很多事情要跟上。 – 2016-12-16 03:10:48
從我看過的設計師演示來看,這不是一個完美的工具。它是1.0版本的產品,所以它肯定會有一些痛點。改變類型就是其中之一。從設計師和代碼生成的角度來看,我認爲在編譯時(不太可能)或運行時(模型實際執行時)會破壞。
您需要自己從設計器或XML文件中刪除該列。
我發現,一般來說,'從數據庫更新模型'功能仍然存在相當多的錯誤。
鍵是我的殺手 - 我還沒有對外鍵關係進行任何修改,或者將主鍵添加到表中並讓更新程序正常工作(因爲它會給出編譯生成的代碼錯誤) - 但要解決這個問題,只需刪除模型並重新導入(只需要一分鐘) - 這顯然不太理想,但我從來沒有從「新鮮」 '進口。
如前所述,您可以從設計器中刪除該列。至於更改列的數據類型:只需從數據庫刷新模型,然後轉到表映射並選擇在數據庫中更改的列。右側的值代表您的模型,奇怪的是,這並不會自動更新,但只需選擇右側的列並轉至屬性並在其中更改數據類型即可。它應該成爲一個下拉菜單。
乾杯。
Ruddy
我建立了類似的應用程序,像你的要求。但我的解決方案很難。我會盡力告訴;
你必須創建自己的數據庫管理類,這些對象將負責創建,更新數據庫模式(我手動創建)。
我在ADO.NET Team blog上看到了很好的文章和源代碼,那麼你也可以從這個博客下載EDMTools,它是開源的。而且您還可以實現模型生成並從其中更新例程到您的項目中。
最後,當您的模式發生變化時,您應該重新創建並綁定模型,並在運行時重建數據組合件。但是你必須知道最重要的想法,你應該將你的數據模型組件與你的項目鬆散耦合在一起(看看這個post)
其他方法,你應該等待EF 4.0版本(它現在是CTP 1),它們宣佈他們將提供創建,刪除,更新DatabaseScript功能。
好鎖
的方式我這樣做(和我做所有你提到的事,再加上重命名列)是通過更改的數據庫,並使用再生EF代碼EF代碼第一。
我並沒有篡改EF Code First類的好或壞(包括關係的無意義命名列)以簡化過程。
如果設計器或ORM模式生成器限制了其中的數據,則不會對生產數據庫進行更改。這就是爲什麼您應該始終檢查您對數據庫的更改是否可行,在開發數據庫上嘗試它們,然後調整代碼以反映更改。
偉大的問題。最近和幾年前有同樣的問題。 :-)也許值得一提的是,重命名現有的列可能會導致頭痛。 – mnemonic 2015-03-25 08:53:12
是的,現在已經非常成熟了,codefirst我再也沒有這個問題了。 – Biri 2015-03-28 09:52:29