ADO.NET Entity Framework 學習(1)

作者: 紫色陰影  發布時間: 2008-08-31 23:50  閱讀: 1040 次  推薦: 0   原文鏈接   [收藏]  

  前一段時間園子里有很多文章介紹分析了Linq To SQL,它可以說是一個簡單實現的ORM,是微軟針對數據和對象的阻抗不平衡的問題。C# 3.0推出一些新的特性,比如Extension Method, Lambda Expression, Anonymous Type,其實這些新特性都是用來為Linq服務。Linq To SQL將程序員從以往寫大量的sql查詢語句、取值、賦值中解放出來,在intellisense和編譯上做了很多工作,使得這些查詢能夠在編譯期進行檢 查。同時微軟推出ADO.NET Entity Framework,即下一代的ADO.NET。它是比Linq To SQL更加強大的ORM,讓開發人員只需要著眼于領域對象模型的開發,而不需要考慮它們是如何與關系數據庫交互。

  本文由一個簡單的例子進行介紹Entity Framework是如何使用的。在此之前,必須下載ADO.NET Entity Framework runtimetools,官方也提供了很多示例下載。下面正式開始ADO.NET Entity Framework之旅(開發工具VS 2008 beta,以Northiwind數據庫為例)。

  首先建立一個Console project(要選擇.NET Framework 3.5),然后點擊Add New Item,看見ADO.NET Entity Data Model選項:

 image

  然后會出現Wizard,選擇數據庫,選擇表、視圖、存儲過程等,按照向導一步步來就可以了,在這里只選擇Customers和Orders表。在 Solution Explore視圖里面點擊Northwind.edmx,可以看到Entity的信息(看上去很像Linq To SQL的dbml設計視圖),然后將它們改名為Customer和Order。

image

  現在我們就可以進行查詢了,先引用命名空間:

using System.Data.Objects;
using NorthwindModel;
 首先我們查詢所有的Customer,代碼和Linq To SQL中的十分相似。
 using (NorthwindEntities ctx = new NorthwindEntities())
 {
     foreach (var customer in ctx.Customers)
     {
         Console.WriteLine(customer.CustomerID);
     }
 }

接著來查詢某個Customer,

 Customer alfki = ctx.Customers.Where("it.CustomerID = 'ALFKI'").First();

"it.CustomerID = 'ALFKI'"表示查詢條件語句,該語句看著又像C#代碼又像SQL,被成為Entity SQL Language,具體語法在幫助文檔上有很詳細的Reference。

這里也可以使用Linq進行查詢(Linq To Entities),需要引用System.Linq命名空間,似乎Entity Framework不支持Single方法,會拋出異常。

 Customer alfki = ctx.Customers.First<Customer>(it => it.CustomerID == "ALFKI");
或者
 Customer alfki = (from c in ctx.Customers
                  where c.CustomerID == "ALFKIA"
                  select c).First();

在Entity Framework中進行一對多的查詢很簡單,但是值得注意的是Entity Framework默認是Lazy Load,即關聯數據在需要的時候才加載。

在本例子中,如果直接查詢該Customer關聯的orders,查詢不到結果。
 foreach (var order in alfki.Orders)
 {
     Console.WriteLine(order.OrderID);
 }

需要在使用orders之前調用 alfki.Orders.Load(), 再次運行便可以得到正確的結果。

[未完待續]
0
0
 
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()