一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-UDA中的委托与应用

简介:
上文回顾

      上一篇文章基于AgileEAS.NET平台基础类库进行应用开发-使用UDA操纵SQL语句一文中演示如何使用UDA进行常规的业务进行操作,我们看到两种数据操纵流程,一种是原始的操作流程,另一种是简化的数据操作流程,应用开发人员不用关心数据库的打开与关闭,这些工作由UDA为我们完成,我们只需要实现与业务相关代码即可。

问题引出

       我们现在再看一眼我们在前面提供的数据处理流程:

image
        AgileEAS.NET平台提供两种数据处理流程供我们选择,两种方式的差别在于应用开发人员是否控制连接的打开与关闭,第一种方式应用开发人员管理连接的打开与关闭,我们称为他原生的数据访问方式,第二种方式是数据库的打开与关闭由UDA对象自动控件,我们称他为懒惰方式吧,在执行SQL之前由UDA打开连接,执行完SQL之后由UDA关闭连接,也就是说在Quer和Execute方法中,包含了数据库的打开与关闭操作。

 

        在基于AgileEAS.NET平台的应用开发中,我们推荐第二种方式,但同时一个问题来了,Query方法在执行完SQL语句之后关闭了连接,对于IDataReader这种必须要连接在线的返回类型则第二种方式无法支持,同时,对于事务处理,一个事务中包含多条语句,第二种方式的自动打开与关闭连接不能支持事务处理。

如何解决

 

 

 

        鉴于上面的问题,我们提供了两种解决方法,第一、使用原生模式处理数据访问,当然这是我们不推荐的,第二、UDA的IDataAccessor中提供了两个委托方法DelegateQuery、TransactionExecute及其相关的重载,DelegateQuery实现DataReader访问方式的委托查询,TransactionExecute实现事务委托,有关于这两个委托方法及其delegate定义请参考AgileEAS.NET之统一数据访问一文及AgileEAS.NET基础类库参考手册

委托查询例子

         现在我们来使用委托查询修改上文中IDataReader查询的例子,先贴上原生方式的IDataReader查询:

    /// <summary>
    /// 演示使用IDataReader。
    /// </summary>
    /// <remarks>
    /// IDataReader返回类型必须要求数据库打开,也就是说手工管理连接的打开。
    /// </remarks>
    public void DemeGetDataReader()
    {
        IDataAccessor accessor = UdaContext.DataAccessor;

        accessor.DataConnection.Open();

        try
        {
            IDataReader reader = null;
            try
            {
                reader = accessor.QueryDataReader("Select top 30 * from dbo.product");
                //reader = (IDataReader)accessor.Query("Select top 30 from dbo.product",
                 ResultType.DataReader);  //等效

                while (reader.Read())
                {
                    int count = reader.FieldCount;
                    for (int i = 0; i < count; i++)
                    {
                        System.Console.Write(string.Format("{0}={1}\t", reader.GetName(i), 
                        reader.IsDBNull(i) ? "null" : reader.GetValue(i)));
                    }
                    System.Console.Write("\n");
                }
            }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
            }
        }
        finally
        {
            accessor.DataConnection.Close();
        }
    }

         下面我们来使用DelegateQuery改造这个方法:

    /// <summary>
    /// 演示代理查询。
    /// </summary>
    public void DemeDelegateQuery()
    {
        IDataAccessor accessor = UdaContext.DataAccessor;
        accessor.DelegateQuery(new DataReaderHandler(this.InternalGetDataReader), 
        "Select top 30 * from dbo.product");
    }

    /// <summary>
    /// 代理方法。
    /// </summary>
    /// <param name="reader"></param>
    void InternalGetDataReader(IDataReader reader)
    {
        while (reader.Read())
        {
            int count = reader.FieldCount;
            for (int i = 0; i < count; i++)
            {
                System.Console.Write(string.Format("{0}={1}\t", reader.GetName(i), 
                reader.IsDBNull(i) ? "null" : reader.GetValue(i)));
            }
            System.Console.Write("\n");
        }
    }
              是不是这种方法感觉很简洁。 

          有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:UDA.Demo2.rar

 

链接

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。



    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/09/20/1831450.html,如需转载请自行联系原作者

相关文章
|
8天前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
57 23
|
26天前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
64 12
|
1月前
|
弹性计算 开发框架 安全
基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发
本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
49 3
|
2月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
2月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
149 2
|
25天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
58 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
104 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
76 0