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

守給你的承諾、 提交于 2020-03-03 00:22:04
导航

目   录: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()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!