EntityClient
實體架構(Entity Framework)在ADO.NET 3.5 提供程式的基礎上引入新的 ADO.NET 提供程式 EntityClient。EntityClient 看上去與之前使用的 ADO.NET 提供程式非常類似,它将提供第一個抽象,可允許開發人員使用标準的 Connection、Command 和 DataReader 對象依照 EDM 執行查詢。它還會将映射域模型所需的用戶端視圖引擎(根據 EDM 定義的)添加到底層關系資料庫架構。必要時,EntityClient 可借助 ESQL 查詢字元串讓開發人員以行和列的形式處理實體,而不必生成類來表示概念架構。
本系列文章上一篇:
<a href="http://blog.entlib.com/EntLib/archive/2008/10/20/entity-data-model-edm-part-1.aspx">Entity Data Model (EDM) 深入分析, Part 1</a>
<a href="http://blog.entlib.com/EntLib/archive/2008/10/21/entity-data-model-edm-part-2.aspx">Entity Data Model (EDM) 深入分析, Part 2</a>
1. EntityCommand 查詢傳回實體類型
Entity SQL也可以通過EntityClient 來執行,盡管代碼比較啰嗦,但是在某些情況下,也是優點。
1) 首先建立EntityConnection,重用Northwind data context 的連接配接字元串,并打開連接配接。
2) 建立 EntityCommand 對象,并傳入Entity SQL語句和資料庫連接配接對象。
3) 建立DbDataReader對象,并循環讀取傳回的結果集。
NorthwindEntities context = new NorthwindEntities();
EntityConnection conn = new EntityConnection(context.Connection.ConnectionString);
conn.Open();
var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp";
EntityCommand cmd = new EntityCommand(sql, conn);
DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
Console.WriteLine("{0} {1} {2} {3}", reader["EmployeeID"], reader["LastName"],
reader["FirstName"], reader["Country"]);
}
當時使用SequentialAccess的DbDataReader時,需要小心通路資料,務必有序的讀取。
如你改變成員的順序,将抛出InvalidOperationException 異常 - "Attempt to read from column ordinal '0' is not valid. With CommandBehavior.SequentialAccess, you may only read from column ordinal '2' or greater."
Console.WriteLine("{0} {1} {2} {3}", reader["LastName"], reader["EmployeeID"],
reader["FirstName"], reader["Country"]);
2. EntityCommand 查詢傳回匿名類型
采用相同的技術可以實作傳回匿名類型。
var sql = "SELECT emp.LastName, emp.FirstName " +
"FROM NorthwindEntities.Employees AS emp";
Console.WriteLine("{0} {1}", reader["LastName"], reader["FirstName"]);
3. EntityCommand 帶參數查詢
EntityCommand 帶參數也比較容易,在Entity SQL字元串中參數名稱以@作為字首,接着建立EntityParameter對象,并增加到EntityCommand 的Parameters集合内。
var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp " +
"WHERE emp.Country = @country";
EntityParameter param = new EntityParameter("country", DbType.String);
param.Value = "USA";
cmd.Parameters.Add(param);
LINQ to Entities
LINQ是在.NET v3.5 引入的新技術。相對于前面的Entity SQL而言,我更偏愛LINQ to entities。LINQ查詢雖然有一些局限,但是LINQ更容易、更自然,此外,還支援強類型,是以智能提示能幫助編寫LINQ查詢腳本。
LINQ to Entities 與LINQ to Objects和LINQ to SQL 基本一樣,是以下面簡單示範2個基本的LINQ to Entities的查詢。
1. LINQ 帶參數查詢
string country = "USA";
var query = from e in context.Employees
where e.Country == country
select e;
foreach (var emp in query)
Console.WriteLine("{0} {1} {2} {3}", emp.EmployeeID, emp.FirstName, emp.LastName, emp.Country);
2. LINQ 查詢傳回匿名類型
select new { e.LastName, e.FirstName };
Console.WriteLine("{0} {1}", emp.LastName, emp.FirstName);
這篇文章對Entity Data Model 和Entity Framework 提供了各種查詢技術進行了簡單的介紹,希望對你有幫助。下一篇文章将介紹更進階的 Entity SQL 查詢技術、檢視SQL 語句、eager loading、變更跟蹤、并發… 等等。
推薦Entity Framework 相關文章:
1. Entity Framework – Update Model From Database, Part 1
<a href="http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-1.aspx">[url]http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-1.aspx[/url]</a>
2. Entity Framework – Update Model From Database, Part 2
<a href="http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-2.aspx">[url]http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-update-model-from-database-part-2.aspx[/url]</a>
3. Entity Framework 架構簡介
<a href="http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-architecture.aspx">[url]http://blog.entlib.com/EntLib/archive/2008/10/19/entity-framework-architecture.aspx[/url]</a>
4. 比較LINQ to SQL Diagram 和Entity Data Model
<a href="http://blog.entlib.com/EntLib/archive/2008/10/19/linq-to-sql-diagram-entity-data-model.aspx">[url]http://blog.entlib.com/EntLib/archive/2008/10/19/linq-to-sql-diagram-entity-data-model.aspx[/url]</a>
英文連結:
1. ADO.NET Entity Framework & LINQ to Entities,
<a href="http://www.scip.be/index.php?Page=ArticlesNET12">[url]http://www.scip.be/index.php?Page=ArticlesNET12[/url]</a>
本文轉自 entlib.com 51CTO部落格,原文連結:http://blog.51cto.com/entlib/107942,如需轉載請自行聯系原作者