• Farseer.net轻量级开源框架 入门篇:分类逻辑层


    导航

    目   录:Farseer.net轻量级开源框架 目录

    上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层

    下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解

    分类逻辑层

    分类逻辑层,主要用在一些需要支持无限递归的树数据。树数据是:必须有一个根节点,根节点有无限个子节点,没有节点限制。比如我们常用的有:(频道、xxx分类)

    这里与BaseCacheModel的操作是完全一致。唯一不同的是,BaseCateModel是继承自ModelCateInfo。这个类提供了默认的几个字段:

     1     /// <summary>
     2     /// 分类基类
     3     /// </summary>
     4     public class ModelCateInfo : ModelInfo
     5     {
     6         /// <summary>
     7         ///     所属ID
     8         /// </summary>
     9         [Display(Name = "所属分类")]
    10         public virtual int? ParentID { get; set; }
    11 
    12         /// <summary>
    13         ///     标题
    14         /// </summary>
    15         [Display(Name = "标题"), StringLength(50), Required]
    16         public virtual string Caption { get; set; }
    17 
    18         /// <summary>
    19         ///     排序
    20         /// </summary>
    21         [Display(Name = "排序")]
    22         public virtual int? Sort { get; set; }
    23     }

    首先,我们先创建一个实体。(数据库就不放上来了)

    ChlDB实体

     它继承了BaseCateModel基类。

    1 namespace FS.Model.Web
    2 {
    3     /// <summary>
    4     /// 频道
    5     /// </summary>
    6     [DB(Name = "Web_ChlDB")]
    7     public class ChlDB : BaseCateModel<ChlDB> { }
    8 }

     看到这里,大家是否觉得奇怪?怎么没有属性呢?因为我们继承了ModelCateInfo,而ModelCateInfo又继承了ModelInfo。所以ID、Caption、Sort、ParentID 都是默认支持的。因此这个类是“空”的属性。

    当然。你会说,你的数据库字段的属性名不叫这个啊。别忘了。类的属性与数据库的字段的映射是通过特性来建立的。也就是说,不管你的类属性名称是什么,只要特性申明中,对应好字段名称就可以了。

    并且这些父类的属性都是可重写的,因此根据你的项目选择性进行重写即可。

    BaseCateModel与BaseCacheModel的区别

    BaseCacheModel有的功能,BaseCateModel都有

    BaseCateModel在这个基础下扩展了一系列针对“树”的操作。(扩展方法的命名空间:using FS.Extend)

    扩展方法提供了一系列上下级节点的搜索方法。比如查询父级、顶级、下级等等操作。当然里面的方法有很多。具体大家在:FS.Extend.ListExtend 类中查看。

    它是在  对象名.Cache() 下的扩展,也就是说是在:List<实体类>  并且 实体类是继承BaseCateModel 的 如图:

      1 /// <summary>
      2     ///     Cate扩展工具
      3     /// </summary>
      4     public static partial class ListExtend
      5     {
      6         /// <summary>
      7         ///     获取指定ParentID的ID列表
      8         /// </summary>
      9         /// <param name="isContainsSub">是否获取子节点</param>
     10         /// <param name="ID">上级ID</param>
     11         /// <param name="isAddMySelf">是否添加自己</param>
     12         /// <param name="lstCate">分类列表</param>
     13         public static List<int> GetSubIDList<TInfo>(this List<TInfo> lstCate, int? ID, bool isContainsSub = true, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
     14 
     15         /// <summary>
     16         ///     获取指定ParentID的ID列表
     17         /// </summary>
     18         /// <param name="caption">分类标题</param>
     19         /// <param name="isContainsSub">是否获取子节点</param>
     20         /// <param name="isAddMySelf">是否添加自己</param>
     21         /// <param name="lstCate">分类列表</param>
     22         public static List<int> GetSubIDList<TInfo>(this List<TInfo> lstCate, string caption, bool isContainsSub = true, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
     23 
     24         /// <summary>
     25         ///     获取指定ParentID的ID列表
     26         /// </summary>
     27         /// <param name="ID">上级ID</param>
     28         /// <param name="isContainsSub">是否获取子节点</param>
     29         /// <param name="isAddMySelf">是否添加自己</param>
     30         /// <param name="lstCate">分类列表</param>
     31         public static List<TInfo> GetSubList<TInfo>(this List<TInfo> lstCate, int? ID, bool isContainsSub = true, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
     32 
     33         /// <summary>
     34         ///     获取指定ParentID的ID列表
     35         /// </summary>
     36         /// <param name="caption">分类标题</param>
     37         /// <param name="isContainsSub">是否获取子节点</param>
     38         /// <param name="isAddMySelf">是否添加自己</param>
     39         /// <param name="lstCate">分类列表</param>
     40         public static List<TInfo> GetSubList<TInfo>(this List<TInfo> lstCate, string caption, bool isContainsSub = true, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
     41 
     42         /// <summary>
     43         ///     通过标题,获取分类数据
     44         /// </summary>
     45         /// <param name="caption">分类标题</param>
     46         /// <param name="isNullAdd">true:不存在则自动创建</param>
     47         /// <param name="lstCate">分类列表</param>
     48         public static int GetID<TInfo>(this List<TInfo> lstCate, string caption, bool isNullAdd = false) where TInfo : ModelCateInfo, new();
     49 
     50         /// <summary>
     51         ///     通过标题,获取分类数据
     52         /// </summary>
     53         /// <param name="caption">分类标题</param>
     54         /// <param name="isNullAdd">true:不存在则自动创建</param>
     55         /// <param name="lstCate">分类列表</param>
     56         public static TInfo GetInfo<TInfo>(this List<TInfo> lstCate, string caption, bool isNullAdd = false) where TInfo : ModelCateInfo, new();
     57 
     58         /// <summary>
     59         ///     获取根节点分类数据
     60         /// </summary>
     61         /// <param name="ID">当前分类数据ID</param>
     62         /// <param name="lstCate">分类列表</param>
     63         public static int GetFirstID<TInfo>(this List<TInfo> lstCate, int? ID) where TInfo : ModelCateInfo, new();
     64 
     65         /// <summary>
     66         ///     获取根节点分类数据
     67         /// </summary>
     68         /// <param name="ID">当前分类数据ID</param>
     69         /// <param name="lstCate">分类列表</param>
     70         public static TInfo GetFirstInfo<TInfo>(this List<TInfo> lstCate, int? ID) where TInfo : ModelCateInfo, new();
     71 
     72         /// <summary>
     73         ///     获取根节点分类数据
     74         /// </summary>
     75         /// <param name="caption">分类标题</param>
     76         /// <param name="lstCate">分类列表</param>
     77         public static int GetFirstID<TInfo>(this List<TInfo> lstCate, string caption) where TInfo : ModelCateInfo, new();
     78 
     79         /// <summary>
     80         ///     获取根节点分类数据
     81         /// </summary>
     82         /// <param name="caption">分类标题</param>
     83         /// <param name="lstCate">分类列表</param>
     84         public static TInfo GetFirstInfo<TInfo>(this List<TInfo> lstCate, string caption) where TInfo : ModelCateInfo, new();
     85 
     86         /// <summary>
     87         ///     获取上一级分类数据
     88         /// </summary>
     89         /// <param name="ID">当前分类数据ID</param>
     90         /// <param name="lstCate">分类列表</param>
     91         public static int GetParentID<TInfo>(this List<TInfo> lstCate, int? ID) where TInfo : ModelCateInfo, new();
     92 
     93         /// <summary>
     94         ///     获取上一级分类数据
     95         /// </summary>
     96         /// <param name="ID">当前分类数据ID</param>
     97         /// <param name="lstCate">分类列表</param>
     98         public static TInfo GetParentInfo<TInfo>(this List<TInfo> lstCate, int? ID) where TInfo : ModelCateInfo, new();
     99 
    100         /// <summary>
    101         ///     获取上一级分类数据
    102         /// </summary>
    103         /// <param name="caption">分类标题</param>
    104         /// <param name="lstCate">分类列表</param>
    105         public static int GetParentID<TInfo>(this List<TInfo> lstCate, string caption) where TInfo : ModelCateInfo, new();
    106 
    107         /// <summary>
    108         ///     获取上一级分类数据
    109         /// </summary>
    110         /// <param name="caption">分类标题</param>
    111         /// <param name="lstCate">分类列表</param>
    112         public static TInfo GetParentInfo<TInfo>(this List<TInfo> lstCate, string caption) where TInfo : ModelCateInfo, new();
    113 
    114         /// <summary>
    115         ///     获取所有上级分类数据(从第一级往下排序)
    116         /// </summary>
    117         /// <param name="ID">当前分类数据ID</param>
    118         /// <param name="isAddMySelf">是否添加自己</param>
    119         /// <param name="lstCate">分类列表</param>
    120         public static List<int> GetParentIDList<TInfo>(this List<TInfo> lstCate, int? ID, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
    121 
    122         /// <summary>
    123         ///     获取所有上级分类数据(从第一级往下排序)
    124         /// </summary>
    125         /// <param name="ID">当前分类数据ID</param>
    126         /// <param name="isAddMySelf">是否添加自己</param>
    127         /// <param name="lstCate">分类列表</param>
    128         public static List<TInfo> GetParentList<TInfo>(this List<TInfo> lstCate, int? ID, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
    129 
    130         /// <summary>
    131         ///     获取所有上级分类数据(从第一级往下排序)
    132         /// </summary>
    133         /// <param name="caption">分类标题</param>
    134         /// <param name="isAddMySelf">是否添加自己</param>
    135         /// <param name="lstCate">分类列表</param>
    136         public static List<int> GetParentIDList<TInfo>(this List<TInfo> lstCate, string caption, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
    137 
    138         /// <summary>
    139         ///     获取所有上级分类数据(从第一级往下排序)
    140         /// </summary>
    141         /// <param name="caption">分类标题</param>
    142         /// <param name="isAddMySelf">是否添加自己</param>
    143         /// <param name="lstCate">分类列表</param>
    144         public static List<TInfo> GetParentList<TInfo>(this List<TInfo> lstCate, string caption, bool isAddMySelf = false) where TInfo : ModelCateInfo, new();
    145 
    146         /// <summary>
    147         ///     绑定到DropDownList
    148         /// </summary>
    149         /// <param name="ddl">要绑定的ddl控件</param>
    150         /// <param name="selectedValue">默认选则值</param>
    151         /// <param name="parentID">所属上级节点</param>
    152         /// <param name="isUsePrefix">是否需要加上前缀</param>
    153         /// <param name="lstCate">分类列表</param>
    154         public static void Bind<TInfo>(this List<TInfo> lstCate, DropDownList ddl, int selectedValue, int parentID, bool isUsePrefix = true) where TInfo : ModelCateInfo, new();
    155 
    156         /// <summary>
    157         ///     绑定到DropDownList
    158         /// </summary>
    159         /// <param name="ddl">要绑定的ddl控件</param>
    160         /// <param name="selectedValue">默认选则值</param>
    161         /// <param name="where">筛选条件</param>
    162         /// <param name="isContainsSub">筛选条件是否包含子节点</param>
    163         /// <param name="isUsePrefix">是否需要加上前缀</param>
    164         /// <param name="lstCate">分类列表</param>
    165         public static void Bind<TInfo>(this List<TInfo> lstCate, DropDownList ddl, int selectedValue = 0, Func<TInfo, bool> where = null, bool isContainsSub = false, bool isUsePrefix = true) where TInfo : ModelCateInfo, new();
    166 
    167         /// <summary>
    168         ///     递归绑定
    169         /// </summary>
    170         private static void Bind<TInfo>(this List<TInfo> lstCate, DropDownList ddl, int parentID, int tagNum, Func<TInfo, bool> where, bool isContainsSub, bool isUsePrefix) where TInfo : ModelCateInfo, new();
    171     }
    总结

    这篇基本上都介绍了BaseCateModel的使用。

    相对于BaseCacheModel,增加了额外对“树”数据结构的操作。

    导航

    目   录:Farseer.net轻量级开源框架 目录

    上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层

    下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解

    广告时间

    QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net

    Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。

    Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。

    ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)

    Farseer.Net的目标是:快速上手、快速开发、简单方便。

    1 new User { ID = 1, Name = "张三" }.Insert()
  • 相关阅读:
    (Problem 14)Longest Collatz sequence
    (Problem 13)Large sum
    (Problem 10)Summation of primes
    (Problem 9)Special Pythagorean triplet
    (Problem 7)10001st prime
    (Problem 6)Sum square difference
    数组
    断点及复习
    抽象和封装
    类和对象
  • 原文地址:https://www.cnblogs.com/steden/p/4075756.html
Copyright © 2020-2023  润新知