前言:EF架構被稱為是企業級應用程式框架的最佳選擇,以前只是知道,一直沒有學習過,這次跟著老馬學習一下,順便分享一下我的學習筆記和一些學習心得,和往常的寫部落格一樣,下面我就先介紹一下在學習EF架構之前的準備工作吧。
1.知識準備
(1) 自動屬性
1) 自動屬性(Auto-Implemented Properties)。
2) 自動屬性簡化了我們在.NET的時候手寫的一堆私人成員+屬性的編程方式,我們只需要使用如下方式聲明一個屬性,編譯器會自動產生所需要的成員變數。
3) 代碼舉例:
public class User
{
public
int ID{get;set;}
public
string Name{get;set;}
public
int Age{get;set;}
}
(2)隱式類型var
1) 這個名稱可能對我們不是很陌生,但是var這個關鍵字應該都用過,在C#中使用var聲明一個對象的時候,編譯器會自動根據其指派陳述式推斷出這個局部變數的類型,賦值以後,這個變數的類型也就確定而不可以再變更,另外var關鍵字也用於匿名類的聲明
2) 應用場合:var主要用途是表示一個Linq查詢的結果,這個結果可能是ObjectQuery<>或者IQueryable<>類型的對象,這時候使用var聲明這個對象可以節省很多代碼書寫上面的時間。
3) 代碼舉例:
var sline=”HANYINGLONG”;
var list=new List<int>();
var anon=new{Name=”Kencery”,Age=23};
4) 下列限制使用隱式類型的變數聲明:
1)只有在同一個語句中聲明或者初始化局部變數時,才能使用var;不能將該變數初始化為null,方法組或者匿名函數。
2)不能將var用於類範圍的域
3)由var聲明的變數不能用在初始設定式中,換句話說,此運算式是合法的,int i=(i=20);,但此運算式會產生編譯錯誤:var i=(i=20);
5) 不能在同一個語句中初始化多個隱式類型的變數
6) 如果範圍中有一個名為var的類型,則var關鍵字將解析為該類型名稱,而不作為隱式類型局部變數聲明的一部分進行處理。
(3)對象初始化器和幾何初始化器
1) 在.NET2.0中構造一個對象的方法是提供一個重載的建構函式,二是預設的建構函式產生一個對象,然後對其屬性進行賦值,在.net3.5/C#3.0種我們有一種更好的方法來進行對象的初始化。那就是使用對象初始化器。這個特性也是匿名類的一個基礎。
2) 基本用法:
LYSC_User
user=new LYSC_User{ID=1,Name=”Kencery”,Age=22};
3) 舉例說明:
List<Person>
list=new List<Person>{
new
Person{ID=’1’,Name=”Kencery”,Age=32},
new Person{ID=’1’,Name=”Kencery”,Age=32},
new Person{ID=’1’,Name=”Kencery”,Age=32}
};
4) 對象初始化器是利用了編譯器對對象中的對外可見的欄位或者屬性進行按序賦值,在編譯還是隱式的調用了建構函式,對欄位或者屬性的賦值可以是一個或者是多個。
(4) 匿名類
1) 有了前面對象初始化器的介紹,我們可以使用new{object
initializer}或者new[]{object,…}來初始化一個匿名類或者不確定類型的數組,匿名類的對象需要使用var關鍵字聲明:代碼如下:
var
user=new{ID=1,Name=”Kencery”,Age=”22”};
2) 應用情境,當直接使用select new{object
initializer}這樣的文法就是將一個Linq查詢的結果返回到一個匿名類中
3) 將一組唯讀屬性封裝到單個對象中,而無需首先顯示定義一個類型,類型名優編譯器產生,並且不能在原始碼級使用,每個屬性的類型由編譯器推斷。
4) 用來初始化屬性的運算式不能為null,匿名函數或者指標類型。
(5)Lambda運算式
1) “Lambda運算式”是一個匿名函數,它可以包含運算式和語句,可用於建立委託。
2) 運算子=>,該運算子讀為”goes to”。
3) 格式:(input parameters)=>expression
4) 匿名函數的例子
delegate bool DelDemo(int a,int b);
DelDemo fun=delegate(int a,int a){return
a>b;};
Console.WriteLine(fun(1,3));
Deledemo func=(int a,int b)=>a>b;
Console.WriteLine(func(1,2));
5)Lambda運算式的使用案例
List<string>
strs = new List<string>() { "1","2","3","5"
};
var data = strs.FindAll(strtemp =>
int.Parse(strtemp) > 2);
foreach (var
item in data)
{
Console.WriteLine(item);
}
2.上面的是準備知識,下面開始Entity Framework的簡介
(1) 簡稱EF。
(2)ADO.NET Entity Framework是微軟以ADO.NET為基礎所發展出來的對象關係對應(O/R Mapping)解決方案,早期被稱為ObjectSpace。
(3)Entity FrameworkEntity Framework是ADO.NET中的一組支援開發面向資料的軟體應用程式的技術,是微軟的一個ORM架構。
3.什麼是O/R Mapping
(1) 廣義上,ORM指的是物件導向的物件模型和關係型資料庫的資料結構之間的相互轉換。
(2) 狹義上,ORM可以被認為是,基於關係型資料庫的資料存放區,實現一個虛擬物件導向的資料提供者。理想情況下,基於這樣一個物件導向的介面,持久化一個OO對象應該不需要瞭解任何關係型資料庫儲存資料的實現細節。
(4) 在EF中的實體資料模型(EDM)由以下三種模型和具有相應副檔名的對應檔進行定義
1) 概念結構定義語言檔案(.csdl) 定義概念性模型
2) 存放結構定義語言檔案(.ssdl) 定義儲存模型(又稱為邏輯模型o)
3) 對應規格語言檔案(.msl) 定義儲存模型與概念性模型之間的映射 M
(5) Entity Framework使用基於XML的模型和對應檔將概念性模型中的實體和關係的建立,讀取,更新和刪除操作轉換為資料來源中的等效操作,EDM支援將概念性模型中的實體映射到資料來源中的預存程序。