Update Model from Database 是EDM 設計器的一個重要改進功能,支持增加新的數據庫表和列,Model能夠正確處理類型(Type)和屬性(Property)的改名,能夠檢測繼承和映射的改變。這裡,我們簡要介紹這一功能的使用及其限制。
下來再次更新model,這次增加了上述2個新表。Model相關部分的更新如下:
現在,我們從SupplierContract復制屬性到Suppliers類型,並刪除 SupplierContracts類型。接著到Suppliers 類型的表映射視圖,通過點擊<Add a Table or View> 單元,並選擇 SupplierContracts,並映射Suppliers類型到SupplierContracts 表。映射視圖如下圖所示:
我們特別選中需要手動更改的地方:SuppliercontractID 列必須映射到Suppliers類型的ID屬性,這是為了Entity Framework 理解如何構建合適的數據庫查詢。
接著,我們刪除PremiumSuppliers 和Suppliers之間的關聯,是PremiumSuppliers繼承Suppliers類型。並刪除PremiumSuppliers中的PremiumSupplierID屬性,因為這個主鍵現在繼承自Suppliers,修復後的映射如下圖所示:
Model相關部分如下圖所示:
最後,我們再次更新model,這次model不會發生變化。上述向導分析了映射,同時也注意到2個PK-to-PK的關聯替換為:一個為繼承關系;另一個映射一個類型到2個數據表。
關於向導限制的最後總結如下:
1.當相應的數據庫列更新時,不能自動更新類型的屬性。
2.不能重新添加實體類型(entity types)- 一旦你在model中刪除了一個類型,重新添加這一實體類型的方法是手動創建,或者在XML編輯器中手動刪除SSDL中相應的XML元素。
3.也不能重新恢復屬性。
4.如果你更改類型的主鍵,所有當前的關聯將丟失它們的identity,且將引入新的關聯 – 你需要刪除舊的關聯。
5.不能檢測數據庫對象的更名 – 更名意味著刪除舊的對象,增加新的對象。
除了這些限制外,你也將發現這一新的功能不僅有用,而且適用。期待你的反饋。
英文鏈接:
1.ADO.NET team blog, Update Model From DB,
http://blogs.msdn.com/adonet/archive/2008/04/01/update-model-from-db.aspx