Entity Framework4.0 (一)概述(EF4 的Database First方法)

Entity Framework4.0(以后簡稱:EF4),是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)一樣,一是為了使開發人員以操作對象的方式去操作關系型數據表。二是為了屏蔽底層不同廠商的數據庫,開發人員面向ORM框架編寫數據的CRUD(Create,Retrieve,Update,Delete)操作,再由ORM框架將這些操作翻譯成不同數據庫廠商的方言。

EF4較之前的版本有了很大的改觀:

  • POCO(Plain Old CLR Objects)的支持:可以對含有業務邏輯的業務對象進行持久化、跟蹤、狀態管理等。
  • 模型驅動開發:EF4提供三種方案:(1)先建立數據庫與數據表,由數據庫中的表生成業務模型。(2)先用設計器設計業務模型,由業務模型生成數據表。(3)純代碼的方式,不用設計器,而是自己實現接口與類,用以和數據庫進行映射。這里的模型驅動就是指方案(2)。
  • 關聯對象的延遲加載:在以前的版本中不支持通過導航屬性去自動加載關聯對象,要使用include(),或顯示Load()才可以。而在EF4中支持通過導航屬性,去自動加載相關聯的對象。
  • 函數化調用數據庫存儲過程與自定義函數:數據庫中的存儲過程和自定義函數可以映射成ObjectContext對象的方法,在程序中直接調用。
  • 自定義代碼生成所且的模板與生成過程:EF4與T4結合使用可以控制生成代碼的模板。EF4與WF(Windows Work Flow)結合使用可以控制生成代碼的過程。
  • 默認情況下:實體集采用復數,實體采用單數命名的形式:以前版本中實體集與實體的名字相同,讓人感覺到困惑。現在EF4解決了這個bug。
  • 復雜屬性:如果一個屬性只有一項內容,我們稱該屬性為標量屬性(Scalar Property)。如果一個屬性由多個標量屬性組合而成,我們稱組合以后的屬性為復雜屬性。如果一個實體中有復雜屬性。在映射到數據表中時,則該復雜屬性內部的每一個標量屬性都會映射成一個獨立的字段。

在“概述”部分,我會用三篇博文簡單演示使用EF4創建應用的方法。目的就為了先給大家展示EF4的一個整體形象,避免過于關注細節,而看不清其全貌。博客園里我看到已經有許多講EF4的博文,講得都很好。但我覺得講得有點太深入了,而且知識點過度有些陡峭了:不利于EF4新手理解和學習。國內也沒有EF4的相關書籍可供大家細致地學習參考。所以,我就盡量寫一些對大家有用的、簡單的、過渡性的博文。避開晦澀難改的技術術語,讓大家快速入門,然后在具體使用中自己深入研究。

EF4支持三種構建方法:1. Database First方法。2.Model First方法。3.Code First 方法。開發人員可根據具體的項目情況,選擇任一種方法。為了盡量把每種方法的詳細步驟講述連貫,前三篇博文暫不深入解釋。我會在后續章節中逐步展開和深入EF4的內部機理和相關知識。

好了,不多說了。下面言歸正傳。這次我們就簡單演示下:1. Database First方法。

=========================================================================

我們創建一個簡單的Windows Form的小示例:以Northwind數據庫為例。

首先,創建EFDemo windForm Application . 如下圖:

在EFDemo項目上右鍵選擇Add->New Item。選擇ADO.Net Entity Data Model.在名稱框中輸入:Northwind,點擊add.

選擇“generate from database” 點擊 next. 如下圖:

選擇數據庫服務器,和數據表。大家對這個應該都不陌生。這里會生成一個連接字符串(用于連接到數據庫),并保存到配置文件內。 如下圖:

那個Tables,我們選擇Categories, Products 兩個表。勾選 :Pluralize or singularize generated object names 和 Include foreign key columns in model.

Namespace 你可以自己設定,我們這里使用默認值。點擊Finish.如下圖:

EF4生成的實體圖,如下:

設計winForm 窗體如下:

運行后,當點擊:InitListBox 按鈕后,填充lboxCategory ,當在lboxCategory 中選擇時,會在lboxProduct中顯示該類別下的所有產品。如下圖:

?

在以下兩個事件處理代碼中:如果要么都使用方法一,要么都使用方法二。兩種方法我更推薦使用方法二,因為它的效率更好。這里給出方法一是想要演示下連接(join)的使用。

在InitLixtBox 的click 代碼如下:

?

button1_Click
 1                // 方法一:我們使用循環遍歷查詢結果的集合元素,然后添加到控制中。
2 //this.lboxCategory.Items.Clear();
3 //using (NorthwindEntities context = new NorthwindEntities())
4 //{
5 // var categories = from category in context.Categories
6 // select new { category.CategoryID,category.CategoryName };
7
8 // foreach (var c in categories)
9 // {
10 // this.lboxCategory.Items.Add(c.CategoryName);
11 // }
12 //}
13
14 // 方法二:該方法是指定數據源的方式。不須要用 this.lboxCategory.Items.Clear();
15 // 來清理上次展示的結果。當再次指定數據源以后,控制顯示的即是最新的數據信息。
16 using (NorthwindEntities context = new NorthwindEntities())
17 {
18 var categories = from category in context.Categories
19 select new { category.CategoryID, category.CategoryName };
20
21 // 注意:給控件指定數據源的時候,對DataSource的賦值語句要在DisplayMember和ValueMember賦值之后,
22 // 否則,DisplayMember和ValueMember的賦值不生效。
23 this.lboxCategory.DisplayMember = "CategoryName";
24 this.lboxCategory.ValueMember = "CategoryID";
25 this.lboxCategory.DataSource = categories;
26
27 }

?

lbCategory的select index change事件響應代碼如下:

lboxCategory_SelectedIndexChanged
 1             // 方法一:我們使用循環遍歷查詢結果的集合元素,然后添加到控制中。
2 //this.lboxProduct.Items.Clear();
3 //if (this.lboxCategory.SelectedItem != null)
4 //{
5 // string categoryName = this.lboxCategory.SelectedItem.ToString();
6 // 這次直接使用CategoryName作篩選條件,需要使用連接(join),因為Product中只包含有CategoryID,而沒有CategoryName。
7 // using (NorthwindEntities context = new NorthwindEntities())
8 // {
9 // var products = from product in context.Products
10 // join category in context.Categories on product.CategoryID equals category.CategoryID
11 // where category.CategoryName == categoryName
12 // select new { product.ProductName };
13
14 // foreach (var p in products)
15 // {
16 // this.lboxProduct.Items.Add(p.ProductName);
17 // }
18 // }
19 //}
20
21 // 方法二:該方法是指定數據源的方式。不須要用 this.lboxProduct.Items.Clear();
22 if (this.lboxCategory.SelectedValue != null)
23 {
24 // 得到類別ID號
25 int categoryID = Convert.ToInt32(this.lboxCategory.SelectedValue.ToString());
26
27 // 這次直接使用CategoryID作篩選條件,不需要使用連接(join),因為Product中包含有CategoryID。
28 using (NorthwindEntities context = new NorthwindEntities())
29 {
30 var products = from product in context.Products
31 where product.CategoryID == categoryID
32 select new { product.ProductName };
33
34 // 注意:給控制指定數據源的時候,對DataSource的賦值語句要在DisplayMember和ValueMember賦值之后,
35 // 否則,DisplayMember和ValueMember的賦值不生效。
36 this.lboxProduct.DisplayMember = "ProductName";
37 this.lboxProduct.DataSource = products;
38 }
39 }

?

簡單的概述下EF4,先這樣吧?實在是頂不住了,要休息了。。。

?

轉載于:https://www.cnblogs.com/marksun/archive/2011/12/15/2289582.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275102.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 相關子查詢使用【主表得數據需要擴展(統計數據依賴與其他表,但是與主表有關聯)】...

2019獨角獸企業重金招聘Python工程師標準>>> SELECT t.building,t.unit,t.room,t.ashcan ,(SELECT COUNT(a.resident_id) from t_address_book a where a.village_id t.village_id AND a.building t.building and a.room t.unit and a.house t.room and…

竟然被尤雨溪點贊了:我給Vue生態貢獻代碼的這一年

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。這篇文章在知乎被尤雨溪…

java版電子商務spring cloud分布式微服務b2b2c社交電商(四)SpringBoot 整合JPA

b2b2c電子商務社交平臺源碼請加企鵝求求:一零三八七七四六二六。JPA全稱Java Persistence API.JPA通過JDK 5.0注解或XML描述對象-關系表的映射關系,并將運行期的實體對象持久化到數據庫中。JPA 的目標之一是制定一個可以由很多供應商實現的AP…

60款很酷的 jQuery 幻燈片演示和下載

jQuery 是一個非常優秀的 JavaScript 框架,使用簡單靈活,同時還有許多成熟的插件可供選擇,它可以幫助你在項目中加入漂亮的效果,其中之一就是幻燈片,一種在有限的網頁空間內展示系列項目時非常好的方法。今天這篇文章要…

流體式布局與響應式布局_將固定像素設計轉換為流體比例布局

流體式布局與響應式布局Responsive web design has been a prime necessity for every enterprise ever since Google announced that responsive, mobile-friendly websites will see a hike in their search engine rank in 2015.自Google宣布響應式,移動友好型網…

怎樣開發一個 Node.js 命令行工具包

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。源碼共讀活動很多都是讀…

redis完全攻略

安裝篇 聲明:以下環境均是在ubuntu下進行 wget http://redis.googlecode.com/files/redis-2.4.4.tar.gztar zxf redis-2.4.4.tar.gz 然后進入目錄后直接make就可以了、如果邇的系統是32位的那么執行 make 32bit 安裝完成后、執行一下make test看是否正常、如果出現“…

印刷報價系統源碼_皇家印刷術-設計系統案例研究

印刷報價系統源碼重點 (Top highlight)Typography. It’s complicated. With Product Design, it’s on every screen. Decisions for a type scale affect literally every aspect of a product. When you’re working with an existing product, defining typography can fee…

Python簡單試題3

1,水仙花數 水仙花數是指一個 3 位數,它的每個位上的數字的 3次冪之和等于它本身 (例如:1^3 5^3 3^3 153) 代碼如下: 方法一: for i in range(100,1000): # 進行for循環num ia num % 10 # …

React Hooks 完全使用指南

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。React HooksHook 是什么…

重新設計Videoland的登錄頁面— UX案例研究

In late October of 2019 me and our CRO lead Lucas, set up a project at Videoland to redesign our main landing page for prospect customers (if they already have a subscription, they will go to the actual streaming product).在2019年10月下旬,我和我…

【常見Web應用安全問題】---5、File Inclusion

Web應用程序的安全性問題依其存在的形勢劃分,種類繁多,這里不準備介紹所有的,只介紹常見的一些。 常見Web應用安全問題安全性問題的列表:   1、跨站腳本攻擊(CSS or XSS, Cross Site Scripting)   2、S…

全新的 Vue3 狀態管理工具:Pinia

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。Vue3 發布已經有一段時間…

JS中變量和函數的使用

一、變量的介紹 1、啥是變量? 變量的本質是一塊有名字的內存空間。變量由變量名和變量值構成。變量名指的是內存空間的別名,一般位于賦值運算符的左邊;而變量值指的是內存空間中的數據,一般位于賦值運算符的右邊。例如:var balanc…

Win32 API消息函數:GetMessagePos

Win32 API消息函數:GetMessagePos 函數功能:該函數返回表示屏幕坐標下光標位置的長整數值。此位置表示當上一消息由GetMessage取得時鼠標占用的點。 函數原型:DWORD GetMessagePos(VOID) 參數:無。 返回值&…

都快 2022 年了,這些 Github 使用技巧你都會了嗎?

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。最近經常有小伙伴問我如…

單線程+異步協程

一 . 線程池和進程池 可以適當的使用,在大量的IO情況下有更好的方法 import time from multiprocessing.dummy import Pool def request(url):print(正在下載->,url)time.sleep(2)print(下載完畢->,url) start time.time() urls [www.baidu.com,www.taobao.com,www.sou…

Repeater\DataList\GridView實現分頁,數據編輯與刪除

一、實現效果 1、GridView 2、DataList 3、Repeater 二、代碼 1、可以去Csdn資源下載,包含了Norwind中文示例數據庫噢!(放心下,不要資源分) 下載地址:數據控件示例源碼Norwind中文數據庫 2、我的開發環境&a…

網站快速成型_我的老板對快速成型有什么期望?

網站快速成型Some of the top excuses I have gotten from clients when inviting them into a prototyping session are: “I am not a designer!” “I can’t draw!” “I have no creative background!”在邀請客戶參加原型制作會議時,我從客戶那里得到的一些主…

碎片化學前端,融入到積極上進的環境,我推薦~

眾所周知,關注公眾號可以了解學習掌握技術方向,學習優質好文,落實到自己項目中。還可以結交圈內好友,讓自己融入到積極上進的技術氛圍,促進自己的技術提升。話不多說,推薦這些優質前端公眾號前端之神 80w閱…