再接再厉VS 2008 sp1 + .NET 3.5 sp1(4) - Entity Framework(实体框架)之EntityClient, ObjectQuery

简介:
[索引页]
[源码下载]


再接再厉VS 2008 sp1 + .NET 3.5 sp1(4) - Entity Framework(实体框架)之EntityClient, ObjectQuery


作者: webabcd


介绍
以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(); 

                        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 

void Page_Load() void Page_Load(object sender, EventArgs e) 
        { 
                 if (!Page.IsPostBack) 
                { 
                        Demo(); 

                        result.InnerHtml +=  "<br />"

                        Demo2(); 

                        result.InnerHtml +=  "<br />"

                        Demo3(); 

                        result.InnerHtml +=  "<br />"

                        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 />"
                        } 
                } 

                /**//* 
                 SELECT    
                [Extent1].[CategoryID]  AS [CategoryID],    
                [Extent1].[CategoryName]  AS [CategoryName],    
                [Extent1].[Description]  AS [Description],    
                [Extent1].[Picture]  AS [Picture] 
                FROM [dbo].[Categories]  AS [Extent1] 
                */ 
        } 

void Demo2() 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] 
                */ 
        } 

void Demo3() 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]    
                */ 
        } 

void Demo4() 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]    
                */ 
        } 
}
 
 




     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/341462 ,如需转载请自行联系原作者
相关文章
|
9天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
2月前
|
开发框架 JavaScript 前端开发
5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
5个.NET开源且强大的快速开发框架(帮助你提高生产效率)
|
28天前
|
开发框架 网络协议 .NET
深入.net框架
深入.net框架
11 0
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
3月前
|
PHP Windows
php扩展com_dndnet(PHP与.NET框架进行交互)
php扩展com_dndnet(PHP与.NET框架进行交互)
php扩展com_dndnet(PHP与.NET框架进行交互)
|
3月前
|
开发框架 前端开发 JavaScript
一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器
|
3月前
|
SQL JavaScript NoSQL
3个.NET开源简单易用的任务调度框架
3个.NET开源简单易用的任务调度框架
103 0
|
3月前
|
数据采集 开发框架 JavaScript
C#/.NET/.NET Core优秀项目和框架2023年12月简报
C#/.NET/.NET Core优秀项目和框架2023年12月简报
|
4月前
|
C# Android开发 iOS开发
9 个 .NET UI 框架,您的选择是?
介绍 9 款 .NET UI 框架,有你的菜麽。
196 1
9 个 .NET UI 框架,您的选择是?