分类逻辑层,主要用在一些需要支持无限递归的树数据。树数据是:必须有一个根节点,根节点有无限个子节点,没有节点限制。比如我们常用的有:(频道、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 }
首先,我们先创建一个实体。(数据库就不放上来了)
它继承了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 都是默认支持的。因此这个类是“空”的属性。
当然。你会说,你的数据库字段的属性名不叫这个啊。别忘了。类的属性与数据库的字段的映射是通过特性来建立的。也就是说,不管你的类属性名称是什么,只要特性申明中,对应好字段名称就可以了。
并且这些父类的属性都是可重写的,因此根据你的项目选择性进行重写即可。
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,增加了额外对“树”数据结构的操作。
QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net
Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。
Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。
ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)
Farseer.Net的目标是:快速上手、快速开发、简单方便。
1 new User { ID = 1, Name = "张三" }.Insert()
来源:https://www.cnblogs.com/steden/p/4075756.html