目 录:
上一篇:
下一篇:
接下来,讲的是我们最最最常用的一个操作,普通逻辑层。项目中90%以上的数据库表,都是继承此类。
先放上一个案例DEMO给大家。(还是用我们之前创建好的Users实体类)
它继承了BaseModel基类。下面我们看看VS的智能感应,会弹出什么列表。
可以看到,在不实例化(静态方法、属性)的情况下。有:
缓存数据,根据条件、排序、获取数据。生成一个Cache Key值。在取值时。
可以根据CacheConfigs的配置文件中自定义的方式,来决定是否取缓存的数据。
我们先看下配置文件:~/App_Data/Cache.config 配置文件。(如果不存在,框架会在你调用访属性时,自动生成)
这里的缓存会根据下面的配置(缓存失效时间)来设置,多久过期。
这里要注意的是,数据库如果改动了。这里的数据就会变成脏数据。不会关联。
只有等到缓存失效后,才能重新获取到最新的数据。(这个也是跟缓存逻辑比较大的区别之一)
1 public class CacheConfig 2 { 3 ///4 /// 数据在VisitTime分钟内被访问VisitCount次后开始缓存 5 /// 6 public int VisitTime = 30; 7 8 ///9 /// 数据在VisitTime分钟内被访问VisitCount次后开始缓存10 /// 11 public int VisitCount = 10;12 13 ///14 /// 缓存失效分钟15 /// 16 public int CacheTimeOut = 120;17 }
接下来,直接看下Cache属性下,有哪些操作吧:
就是一些常用的获取数据的操作。(这个方法则没有对数据库进行写、删除的操作)
比如:
1 Users.Cache.Where(o => o.ID == 1).ToInfo();2 List lst = new List () { 1, 2, 3, 4, 5 };3 Users.Cache.Where(o => lst.Contains(o.ID)).ToList();
同时,每个方法里。都有参数:
/// 是否忽略统计,直接加入缓存
默认为False,如果显示传入True时,则表示,不经过统计,直接加入缓存。
可以看到,该属性跟Cache是很相似的。唯一不同的两处地方是:Data不是缓存操作;
Data含有单值修改、删除等操作。一般来说,只要不考虑缓存。都是用Data属性里面的操作方法。
这里的Data 返回的对象是:Bean<Users>对象。
在Data操作后,会返回操作结果,包括:查询数据库时间、SQL、等一系列性能反馈。
1 namespace FS.Core.Bean 2 { 3 ///4 /// 返回执行结果 5 /// 6 public class DataResultwhere TInfo : ModelInfo, new() 7 { 8 /// 9 /// 执行的Sql10 /// 11 public string Sql { get; set; }12 13 ///14 /// Sql生成时间15 /// 16 public double SqlBuildTime { get; set; }17 18 ///19 /// 操作数据时间20 /// 21 public double OperateDataTime { get; set; }22 23 ///24 /// 转到实体用时25 /// 26 public double ToModelTime { get; set; }27 28 ///29 /// 参数列表30 /// 31 public ListParmsList { get; set; }32 }33 }
即从表单中获取填入的值,赋值到实体类中。
这里有个规则,表单控件的命名ID组成:前缀 + 实体属性名称
如:在我们的实体类中有个属性:UserName。
那我们控件命名为:ID="hlUserName" 即前缀为 hl (框架默认为hl)
这里要注意的是,单次获取的表单里的前缀必需统一。
最后,我们看下实例化后,有哪些方法操作。
实例化后有:Fill、Join、GetValue、Insert、Save、Update 等方法
其中Join 是关联其它表的数据,这里将在其它篇幅中讲解
Fill:将实体类填充到控件中。即当这个实体类从数据库得到值后。
我们可以用这个方法。将所有属性的值,赋值到控件中。
代替:等一系列的操作。
1 hlUserName.TextBox = user.UserName;2 hlID.TextBox = User.ID.ToString();
GetValue:获取单个属性的值。在运行的时候,动态获取属性值。下面两句是等同的。
1 user.GetValue("ID", 0);2 user.ID;
Insert:数据插入
1
用户名 | 4 | 5
密码 | 8 | 9
性别 | 12 | 13
邮箱 | 16 | 17
| 20
1 void btnAdd_Click(object sender, EventArgs e) 2 { 3 // Form 即从表单提交过来的数据。赋值到实体类中。与Fill操作,正好相反 4 var info = Users.Form(); 5 // Check 检测实体类赋值情况。根据实体类的特性申明,进行判断 6 if (!info.Check()) { return; } 7 8 info.Insert(); 9 10 JavaScript.Alert("注册成功!", "/");11 }
Update:数据修改
1
用户名 | 4 | 5
密码 | 8 | 9
性别 | 12 | 13
邮箱 | 16 | 17
| 20
1 void btnSave_Click(object sender, EventArgs e) 2 { 3 // Form 即从表单提交过来的数据。赋值到实体类中。与Fill操作,正好相反 4 var info = Users.Form(null, "hl2"); 5 // Check 检测实体类赋值情况。根据实体类的特性申明,进行判断 6 if (!info.Check()) { return; } 7 8 info.Update(reqID); 9 10 JavaScript.Alert("修改成功!", "/");11 }
这篇基本上都介绍了BaseModel的使用。
可能有些同学们会疑问Data、Cache的区别。
Data:读写数据。不作缓存处理。即时操作。
Cache:只有读数据操作。根据一定时间内和调用次数。会判断是否加入缓存。
下次在调用时。会根据同样的条件、排序的SQL,生成Key值来取缓存的值。
也就是说,如果缓存没有命中,它跟Data的读数据,是没有区别的。但是当命中缓存时。这时他会到缓存中取值。
原理:
根据Where条件、Sort排序、Top数量 组合成 Key 加入统计队列。
根据这个Key ,统计在一定时间范围内,访问的次数。如果符合,则加入缓存。
这里涉及到的三个配置项:统计时间、访问次数、缓存失效时间。都可以在~/App_Data/Cache.config 中进行手动配置。
目 录:
上一篇:
下一篇:
QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net
Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。
Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。
ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)
Farseer.Net的目标是:快速上手、快速开发、简单方便。
1 new User { ID = 1, Name = "张三" }.Insert()