本文章以下圖所示的關系圖來作為練習的數據庫(圖片引用自ccBoy的博客)
在這個關系圖中需要特別注意的一點是Book表上的Author ID字段消失了
Entity Framework屏蔽和封裝了Book表中Author ID屬性從而讓客戶端或用戶看起來也更加面向對象接著ccBoy在這個數據庫關系的基礎上為大家提供了如下種類型標准操作的示例代碼
新增一個作者和他的一本書
新增一個作者但不增加書
給一個給定的作者增加一本書的記錄
修改作者的基本信息並更新但未修改作者和書的關聯關系
修改書的基本信息並更新但未修改作者和書的關聯關系
改變一個已關聯的作者和書的關系將書關聯到另外一個作者
刪除給定作者的一本書
刪除一個作者目前作者沒有創作任何一本書
刪除一個作者也包括他創作了所有書的記錄
除了以上的類操作外他也給出了一種處理異常的示例代碼值得大家借鑒
在逐一展示了這些示例代碼後ccBoy對ADONET數據服務的操作進行了一個總結如下的總結對於理解在客戶端對ADONET數據服務進行操作有很大的幫助
四個 CRUD 操作(CreateRetrieveUpdate 和 Delete)中的每個操作都映射到一個不同的 HTTP 動詞Retrieve 映射到 GETCreate 映射到 POSTUpdate 映射到 PUTDelete 映射到 DELETE
客戶端的Context對象你可以把它想像成離線版本的數據源Entity Framework Context
客戶端所有的CUD的操作只有在調用SaveChanges()才會將變化傳送到真正的數據源
SetLinkAddLinkDetachLink是進行實體關系管理的……DetachLink是在你要刪除某個實體你需要將有關聯的兩個實體之間的關聯打斷並告 訴客戶端的Context而DeleteLink更多的是告訴客戶端Context你要將兩個實體間的關聯完全打斷這個方法有用但我覺得它的實用性最低
AttachTo和Detach則是你用了處理實體狀態的主要方法……當你調用AttachTo作用於一個POCO對象的時候這個對象變成了實體……Detach方法你可以將其理解成反操作即將一個實體還原成POCO
有時候AttachTo操作是隱形的比如所有通過Context查詢方法查詢來的對象其實都是實體同樣你將一個POCO對象賦值給一個實體對象時似乎也默認會將這個POCO對象加入到客戶端Context中
AddToXXX(比如AddToAuthor)是Entity Framework自動生成的簡易方法其實和調用AddObject方法等同最後ccBoy對ADONET數據服務和ADONET實體框架進行了一些討論涉及到和NHibernate比較對編程模型和系統構架的影響以及一些性能方面的探討等
From:http://tw.wingwit.com/Article/program/net/201311/15151.html