TKCORE框架学习之初级篇(一)--TableResolver的初步介绍

TableResolver的初步介绍

在入门篇里介绍的各项功能,都只需要配置XML就可以实现,非常的方便。然而,实际项目中情况会更加的灵活多变,仅仅通过配置是没法覆盖的。从初级篇开始会陆续介绍在XML配置的基础上如何通过插件的方式扩展或修改以前的配置。

常规的Tk5TableResolver插件示例

这里假设你已经了解添加插件模块的方法,如你不清楚的话,请点击 怎么添加插件模块

这里以代理商管理功能为例:

  • 在插件工程里添加AgentResolver类,代码如下

    using System;
    using System.Data;
    using YJC.Toolkit.Data;
    using YJC.Toolkit.Sys;
    
    namespace TK55.Agent
    {
        [Resolver(Author = "XXX", CreateDate = "2020-06-15",
            Description = "销售商表的数据访问层类")]
        public class AgentResolver : Tk5TableResolver
        {
            internal const string DATAXML = "Agent/Agent.xml";
    
            /// <summary>
            /// 建构函数,设置附着的Xml文件。
            /// </summary>
            /// <param name="context">数据库连接上下文</param>
            /// <param name="source">附着的数据源</param>
            public AgentResolver(IDbDataSource source)
                : base(DATAXML, source)
            {
                AutoUpdateKey = false;
                AutoTrackField = true;
            }
    
            /// <summary>
            /// 在表发生新建、修改和删除的时候触动。注意,千万不要删除base.OnUpdatingRow(e);
            /// UpdatingRow事件附着在基类该函数中。
            /// </summary>
            /// <param name="e">事件参数</param>
            protected override void OnUpdatingRow(UpdatingEventArgs e)
            {
                base.OnUpdatingRow(e);
    
                switch (e.Status)
                {
                    case UpdateKind.Insert:
                        break;
                    case UpdateKind.Update:
                        break;
                    case UpdateKind.Delete:
                        break;
                }
            }
        }
    }
    

    注意:需要在类名AgentResolver上标注ResolverAttribute。只有这样,插件才会注册。如果没在ResolverAttribute中显示指定注册名,那么系统自动将类名去掉Resolver的后缀,来获取注册名。以上面的代码为例,注册名为Agent。

  • 在Module的Xml里配置访问AgentResolver类,配置如下:

    <tk:Module>
      <tk:Title>
        <tk:Content>销售商管理</tk:Content>
      </tk:Title>
      <tk:MetaData>
        <tk:SingleXmlMetaData DataXml="Agent/Agent.xml" ColumnCount="1"/>
      </tk:MetaData>
      <tk:Source>
        <tk:SingleDbSource DisablePage="Delete" PageSize="15" OrderBy="order by if_show desc,update_date desc">
          <tk:Resolver>
            <tk:RegResolver>Agent</tk:RegResolver>
          </tk:Resolver>
        </tk:SingleDbSource>
      </tk:Source>
      <tk:PageMaker>
        <tk:RazorModuleTemplatePageMaker ModuleTemplate="Single" />
      </tk:PageMaker>
    </tk:Module>
    

以上配置、页面上的增删改查等数据操作就会调用AgentResolver类。下面对Tk5TableResolver类常用的属性和方法进行讲解。

Tk5TableResolver常用属性和方法

  • AutoUpdateKey

    新增时是否自动生成主键。设置为true时,框架会根据不同的数据库,自动产生一个唯一的Id给对应的主键。

  • AutoTrackField

    是否自动设置追踪字段的值。设置为true时,框架会根据当前登录用户和系统时间以及新建还是修改更新以下四个字段,这四个字段的昵称必须是:CreateDate、CreateId、UpdateDate、UpdateId,请注意这四个字段的昵称是大小写敏感的。

  • OnUpdatingRow(UpdatingEventArgs e)

    在表的每条记录发生新建、修改和删除的时候触动(注意这是记录级的,针对每条记录。如果修改了两条记录,那么这个方法会被触动两次)。你可以在这里根据业务需要,修改其他相关字段的值或者其他表的记录。

    譬如:AutoTrackField设置为false,由自己实现相同功能,如下:

    /// <summary>
    /// 在表发生新建、修改和删除的时候触动。注意,千万不要删除base.OnUpdatingRow(e);
    /// UpdatingRow事件附着在基类该函数中。
    /// </summary>
    /// <param name="e">事件参数</param>
    protected override void OnUpdatingRow(UpdatingEventArgs e)
    {
        base.OnUpdatingRow(e);
    
        switch (e.Status)
        {
            case UpdateKind.Insert:
                e.Row["CreateId"] = e.Row["UpdateId"] = BaseGlobalVariable.UserId;
                e.Row["CreateDate"] = e.Row["UpdateDate"] = DateTime.Now;
                break;
            case UpdateKind.Update:
                e.Row["UpdateId"] = BaseGlobalVariable.UserId;
                e.Row["UpdateDate"] = DateTime.Now;
                break;
            case UpdateKind.Delete:
                break;
        }
    }
    
关于TKCore的更多信息请点击: http://www.tkcore.net
关注微信公众号获取TKCore最新资讯:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TkCore

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值