<a href="http://webabcd.blog.51cto.com/1787395/341154" target="_blank">[索引頁]</a>
<a href="http://down.51cto.com/data/99915">[源碼下載下傳]</a>
再接再厲VS 2008 sp1 + .NET 3.5 sp1(4) - Entity Framework(實體架構)之EntityClient, ObjectQuery
介紹
以Northwind為示例資料庫,ADO.NET Entity Framework之詳解EntityClient, ObjectQuery
EntityConnection - 與存儲模型的連接配接
EntityCommand - 對 EDM 執行的指令
EntityParameter - 配置 EntityCommand 的參數
EntityDataReader - 以隻讀、隻進的資料流的方式擷取資料(記憶體中始終隻有一行)。相當于SqlDataReader
ObjectQuery<T> - 通過 Entity SQL 或 查詢文法 或 Linq 方法對概念模型做查詢
ObjectContext.CreateQuery<T>(Entity SQL) - 根據 esql 建立一個 ObjectQuery<T> 。(延遲)
示例
1、關于EntityClient
EntityClient.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.Data.EntityClient;
using System.Data;
using VS2008SP1.Business;
public partial class EntityFramework_EntityClient : System.Web.UI.Page
{
void Page_Load() void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Demo();
result.InnerHtml += "<br />";
Demo2();
Demo3();
}
}
void Demo()
string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindEntities"].ConnectionString;
// EntityConnection - 與存儲模型的連接配接。構造函數的參數為連接配接字元串
// Open() - 打開連接配接
// Close() - 關閉連接配接
// CreateCommand() - 建立此連接配接的 EntityCommand 對象
using (EntityConnection conn = new EntityConnection(strConn))
conn.Open();
try
{
// EntityCommand - 對 EDM 執行的指令
// CommandType - 指令類型 [System.Data.CommandType枚舉]
// CommandType.Text - esql語句。預設值
// CommandType.StoredProcedure - 存儲過程名
// CommandType.TableDirect - 表名
// CommandText - 指令文本。esql語句或存儲過程名或表名
// CommandTimeout - 逾時時間。機關:秒
using (EntityCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select value c from NorthwindEntities.Categories as c";
// EntityDataReader - 以隻讀、隻進的資料流的方式擷取資料(記憶體中始終隻有一行)。相當于SqlDataReader
// Read() - 讀下一條記錄
// HasRows() - 是否還有可讀資料
// Close() - 關閉 EntityDataReader
// EntityCommand.ExecuteReader() - 執行指令,傳回 EntityDataReader 對象
using (EntityDataReader edr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
while (edr.Read())
{
result.InnerHtml += edr["CategoryName"].ToString() + "<br />";
}
}
}
}
catch (Exception ex)
result.InnerHtml += ex.ToString();
finally
conn.Close();
/**//*
SELECT
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[CategoryName] AS [CategoryName],
[Extent1].[Description] AS [Description],
[Extent1].[Picture] AS [Picture]
FROM [dbo].[Categories] AS [Extent1]
*/
void Demo2()
// EntityConnection 構造函數的參數為 name = web.config中的connectionStrings中配置的連接配接字元串的name
using (EntityConnection conn = new EntityConnection("name = NorthwindEntities"))
cmd.CommandText = "select value s from NorthwindEntities.categories as s where s.categoryId = @categoryId";
// EntityParameter - 配置 EntityCommand 的參數
// ParameterName - 參數名
// Value- 參數值
// Size - 參數大小
// DbTyp - 參數類型 [System.Data.DbType 枚舉]
// IsNullable - 是否接受 null 值
EntityParameter param = new EntityParameter();
param.ParameterName = "categoryId";
param.Value = 1;
// EntityCommand.Parameters.Add() - 為 EntityCommand 增加參數
cmd.Parameters.Add(param);
result.InnerHtml += edr.GetString(1) + "<br />";
exec sp_executesql N'SELECT
WHERE [Extent1].[CategoryID] = @categoryId',N'@categoryId int',@categoryId=1
void Demo3()
// EntityConnectionStringBuilder - 構造連接配接字元串
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Northwind.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True";
entityBuilder.Metadata = @"res://*/Northwind.csdl|res://*/Northwind.ssdl|res://*/Northwind.msl";
using (EntityConnection conn = new EntityConnection(entityBuilder.ConnectionString))
// 調用存儲過程(需要先做好映射,然後指定概念模型中的函數名稱)
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "NorthwindEntities.GetCategory";
param.ParameterName = "CategoryID";
exec [dbo].[spSelectCategory] @CategoryID=1
}
2、關于ObjectQuery
ObjectQuery.aspx.cs
using System.Data.Common;
public partial class EntityFramework_ObjectQuery : System.Web.UI.Page
Demo4();
void Demo() void Demo()
using (var ctx = new NorthwindEntities())
string esql = "select value c from NorthwindEntities.Categories as c";
// ObjectQuery<T> - 通過 Entity SQL 或 查詢文法 或 Linq 方法對概念模型做查詢
// ObjectContext.CreateQuery<T>(Entity SQL) - 根據 esql 建立一個 ObjectQuery<T> 。(延遲)
ObjectQuery<Categories> query = ctx.CreateQuery<Categories>(esql);
foreach (var c in query)
result.InnerHtml += c.CategoryName + "<br />";
void Demo2() void Demo2()
string esql = "select c.CategoryName from NorthwindEntities.Categories as c";
// ObjectQuery<T>()構造函數 - 根據 esql 建立一個 ObjectQuery ,傳回 DbDataRecord 。(延遲)
// System.Data.Objects.MergeOption枚舉 - 如何将此次查詢結果與之前同一 ObjectContext 的存在與記憶體的查詢結果做合并
// MergeOption.AppendOnly - 追加。預設值
// MergeOption.OverwriteChanges - 以新結果為準
// MergeOption.PreserveChanges - 以原結果為準
// MergeOption.NoTracking - 取消變更跟蹤,不會使用 ObjectStateManager,減少執行查詢的時間,所有傳回的實體将是分離的狀态(detached state)
ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(esql, ctx, MergeOption.NoTracking);
// 可以在 ObjectQuery<T> 上使用 Linq 方法或查詢文法
foreach (DbDataRecord item in query.Take(3))
result.InnerHtml += item["CategoryName"].ToString() + "<br />";
[Limit1].[C1] AS [C1],
[Limit1].[CategoryName] AS [CategoryName]
FROM ( SELECT TOP (3)
[Extent1].[CategoryName] AS [CategoryName],
1 AS [C1]
FROM [dbo].[Categories] AS [Extent1]
) AS [Limit1]
void Demo3() void Demo3()
string esql = "select value count(c.CategoryID) from NorthwindEntities.Categories as c";
// ObjectQuery<簡單類型> 的示例(延遲)
ObjectQuery<int> query = ctx.CreateQuery<int>(esql);
result.InnerHtml += query.First().ToString() + "<br />";
[Limit1].[A1] AS [C1]
FROM ( SELECT TOP (1)
COUNT([Extent1].[CategoryID]) AS [A1]
) AS [Limit1]
void Demo4() void Demo4()
// 延遲
// ObjectQuery<T>.Execute() - 立即執行查詢。傳回 ObjectResult<T>
ObjectResult<Categories> queryResult = query.Execute(MergeOption.NoTracking);
foreach (var c in queryResult)
FROM [dbo].[Categories] AS [Extent1]
OK
本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/341462,如需轉載請自行聯系原作者