程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Entity Framework – Update Model From Database, Part 1

Entity Framework – Update Model From Database, Part 1

編輯:關於.NET

Update Model from Database 是EDM 設計器的一個重要改進功能,支持增加新的數據庫表和列,Model能夠正確處理類型(Type)和屬性(Property)的改名,能夠檢測繼承和映射的改變。這裡,我們簡要介紹這一功能的使用及其限制。

首先,我們使用Northwind 數據庫,並添加Products 數據表。

接著,將Products 更名為 Product,並運行Update Model from Database – 該菜單項在Model 設計器的右鍵菜單中,如下圖所示:

Update Model from Database 的界面如下,可以方便增加數據表、視圖、存儲過程的映射。

注意上圖也提供了Refresh / Delete 頁面,其功能分別如下:

Add – 顯示數據庫中的對象,如表、視圖、存儲過程,但沒有在Model的對象。

Refresh – 顯示同時在數據庫和Model 中的對象。

Delete – 顯示在Model 中的對象,但不存在於數據庫。

因為向導總是重新生成SSDL – 任何對SSDL 的更改在Refresh的時候將丟失。下面,我們增加Orders, Order_Details, Suppliers 數據表到Model 中:

但是,現在我們校驗(Valid)Model時,有可能出現如下的驗證錯誤:

"Problem in Mapping Fragment(s) starting at line(s) (110, 176): Non-primary-key column(s) [SupplierID] being mapped in both fragments to different conceptual side properties - data inconsistency is possible because the corresponding conceptual side properties can be independently modified.”

Entity Framework 提示Products表中SupplierID列映射了2次。原因是在第一次導入時,僅僅增加了一個表products,因此沒有創建關聯(association),SupplierID字段表現為一個屬性。現在,我們查看Products表和Suppliers表的關聯映射,發現關聯映射到SupplierID列:

在這種情況,Update Model Wizard 向導也無能為力,因為Update Model的策略是避免刪除model的任何部分。因此,我們刪除Product 類型的SupplierID屬性,這樣Model驗證通過。

接下來,我們修改數據庫對象:

1. 在Suppliers 數據表增加IsCurrent 列。

2. 從Suppliers 數據表中刪除 ContactTitle列。

一旦完成上述更新後,我們再次更新Model,如下是Suppliers 類型的屬性列表:

我們也將看到如下的驗證錯誤:

“Property ContactTitle is not mapped or used in a condition.”

向導增加了新的屬性IsCurrent到Suppliers類型中,但是沒有刪除ContactTitle屬性,這是“不刪除model元素”的策略。因此,我們需要手動刪除ContactTitle屬性。

下一步數據庫更新是演示向導中新的映射分析特性(Mapping Analysis Feature):

1. 增加一個新的Supplier類型的表,命名為PremiumSuppliers,增加2列,如下圖所示。

2. 增加SupplierContract 表到數據庫中,包含大量的合同文檔和額外的元數據。增加3列,如下圖所示。

3. 增加上述2個表和Suppliers表之間的PK to PK的約束,主鍵表為Suppliers表。

英文鏈接:

1. ADO.NET team blog, Update Model From DB,

http://blogs.msdn.com/adonet/archive/2008/04/01/update-model-from-db.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved