前言: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.上面的是准備知識,下面開始實體框架的簡介
(1) 簡稱EF。
(2)ADO.NET Entity Framework是微軟以ADO.NET為基礎所發展出來的對象關系對應(O/R Mapping)解決方案,早期被稱為ObjectSpace。
(3)實體框架Entity 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) 實體框架使用基於XML的模型和映射文件將概念模型中的實體和關系的創建,讀取,更新和刪除操作轉換為數據源中的等效操作,EDM支持將概念模型中的實體映射到數據源中的存儲過程。