程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> VS 2008 sp1 + .NET 3.5 sp1(4)

VS 2008 sp1 + .NET 3.5 sp1(4)

編輯:關於.NET

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
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!Page.IsPostBack)
    {
      Demo();
  
      result.InnerHtml += "<br />";
  
      Demo2();
  
      result.InnerHtml += "<br />";
  
      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"))
    {
      conn.Open();
  
      try
      {
        using (EntityCommand cmd = conn.CreateCommand())
        {
          cmd.CommandType = CommandType.Text;
          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);
  
          using (EntityDataReader edr = cmd.ExecuteReader

(CommandBehavior.SequentialAccess))
          {
            while (edr.Read())
            {
              result.InnerHtml += edr.GetString(1) + "<br />";
            }
          }
        }
      }
      catch (Exception ex)
      {
        result.InnerHtml += ex.ToString();
      }
      finally
      {
        conn.Close();
      }
    }
  
    /**//*
    exec sp_executesql N'SELECT
    [Extent1].[CategoryID] AS [CategoryID],
    [Extent1].[CategoryName] AS [CategoryName],
    [Extent1].[Description] AS [Description],
    [Extent1].[Picture] AS [Picture]
    FROM [dbo].[Categories] AS [Extent1]
    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))
    {
      conn.Open();
  
      try
      {
        using (EntityCommand cmd = conn.CreateCommand())
        {
          // 調用存儲過程(需要先做好映射,然後指定概念模型中的函數名稱)
          cmd.CommandType = CommandType.StoredProcedure;
          cmd.CommandText = "NorthwindEntities.GetCategory";
  
          EntityParameter param = new EntityParameter();
          param.ParameterName = "CategoryID";
          param.Value = 1;
          cmd.Parameters.Add(param);
  
          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();
      }
    }
  
    /**//*
    exec [dbo].[spSelectCategory] @CategoryID=1
    */
  }
}

2、關於ObjectQuery

ObjectQuery.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 System.Data.Common;
  
using VS2008SP1.Business;
  
public partial class EntityFramework_ObjectQuery : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!Page.IsPostBack)
    {
      Demo();
  
      result.InnerHtml += "<br />";
  
      Demo2();
  
      result.InnerHtml += "<br />";
  
      Demo3();
  
      result.InnerHtml += "<br />";
  
      Demo4();
    }
  }
  
  private 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 />";
      }
    }
  
    /**//*
    SELECT
    [Extent1].[CategoryID] AS [CategoryID],
    [Extent1].[CategoryName] AS [CategoryName],
    [Extent1].[Description] AS [Description],
    [Extent1].[Picture] AS [Picture]
    FROM [dbo].[Categories] AS [Extent1]
    */
  }
  
  private void Demo2()
  {
    using (var ctx = new NorthwindEntities())
    {
      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 />";
      }
    }
  
    /**//*
    SELECT
    [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]
    */
  }
  
  private void Demo3()
  {
    using (var ctx = new NorthwindEntities())
    {
      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 />";
    }
  
    /**//*
    SELECT
    [Limit1].[A1] AS [C1]
    FROM ( SELECT TOP (1)
      COUNT([Extent1].[CategoryID]) AS [A1]
      FROM [dbo].[Categories] AS [Extent1]
    ) AS [Limit1]
    */
  }
  
  private void Demo4()
  {
    using (var ctx = new NorthwindEntities())
    {
      string esql = "select value c from NorthwindEntities.Categories as c";
      
      // 延遲
      ObjectQuery<Categories> query = ctx.CreateQuery<Categories>(esql);
  
      // ObjectQuery<T>.Execute() - 立即執行查詢。返回 ObjectResult<T>
      ObjectResult<Categories> queryResult = query.Execute

(MergeOption.NoTracking);
  
      foreach (var c in queryResult)
      {
        result.InnerHtml += c.CategoryName + "<br />";
      }
    }
  
    /**//*
    SELECT
    [Extent1].[CategoryID] AS [CategoryID],
    [Extent1].[CategoryName] AS [CategoryName],
    [Extent1].[Description] AS [Description],
    [Extent1].[Picture] AS [Picture]
    FROM [dbo].[Categories] AS [Extent1]
    */
  }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved