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

导航

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

上一篇:Farseer.net轻量级开源框架 入门篇: 实体类

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

接下来,讲的是我们最最最常用的一个操作,普通逻辑层。项目中90%以上的数据库表,都是继承此类。

先放上一个案例DEMO给大家。(还是用我们之前创建好的Users实体类)

 它继承了BaseModel基类。下面我们看看VS的智能感应,会弹出什么列表。

可以看到,在不实例化(静态方法、属性)的情况下。有:

Cache属性

缓存数据,根据条件、排序、获取数据。生成一个Cache Key值。在取值时。

可以根据CacheConfigs的配置文件中自定义的方式,来决定是否取缓存的数据。

我们先看下配置文件:~/App_Data/Cache.config 配置文件。(如果不存在,框架会在你调用访属性时,自动生成)

这里的缓存会根据下面的配置(缓存失效时间)来设置,多久过期。

这里要注意的是,数据库如果改动了。这里的数据就会变成脏数据。不会关联。

只有等到缓存失效后,才能重新获取到最新的数据。(这个也是跟缓存逻辑比较大的区别之一)

 1     public class CacheConfig
 2     {
 3         /// <summary>
 4         /// 数据在VisitTime分钟内被访问VisitCount次后开始缓存
 5         /// </summary>
 6         public int VisitTime = 30;
 7 
 8         /// <summary>
 9         /// 数据在VisitTime分钟内被访问VisitCount次后开始缓存
10         /// </summary>
11         public int VisitCount = 10;
12 
13         /// <summary>
14         /// 缓存失效分钟
15         /// </summary>
16         public int CacheTimeOut = 120;
17     }

接下来,直接看下Cache属性下,有哪些操作吧:

就是一些常用的获取数据的操作。(这个方法则没有对数据库进行写、删除的操作)

比如:

1             Users.Cache.Where(o => o.ID == 1).ToInfo();
2             List<int> lst = new List<int>() { 1, 2, 3, 4, 5 };
3             Users.Cache.Where(o => lst.Contains(o.ID)).ToList();

 同时,每个方法里。都有参数:

/// <param name="isIgnoreStatistics">是否忽略统计,直接加入缓存</param>

默认为False,如果显示传入True时,则表示,不经过统计,直接加入缓存。

 

Data属性

可以看到,该属性跟Cache是很相似的。唯一不同的两处地方是:Data不是缓存操作;

Data含有单值修改、删除等操作。一般来说,只要不考虑缓存。都是用Data属性里面的操作方法。

这里的Data 返回的对象是:Bean<Users>对象。

DataResult属性

在Data操作后,会返回操作结果,包括:查询数据库时间、SQL、等一系列性能反馈。

View Code
 1 namespace FS.Core.Bean
 2 {
 3     /// <summary>
 4     /// 返回执行结果
 5     /// </summary>
 6     public class DataResult<TInfo> where TInfo : ModelInfo, new()
 7     {
 8         /// <summary>
 9         /// 执行的Sql
10         /// </summary>
11         public string Sql { get; set; }
12 
13         /// <summary>
14         /// Sql生成时间
15         /// </summary>
16         public double SqlBuildTime { get; set; }
17 
18         /// <summary>
19         /// 操作数据时间
20         /// </summary>
21         public double OperateDataTime { get; set; }
22 
23         /// <summary>
24         /// 转到实体用时
25         /// </summary>
26         public double ToModelTime { get; set; }
27 
28         /// <summary>
29         /// 参数列表
30         /// </summary>
31         public List<DbParameter> ParmsList { get; set; }
32     }
33 }

 

Form、QueryString(方法)

即从表单中获取填入的值,赋值到实体类中。

这里有个规则,表单控件的命名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                 <table class="auto-style1">
 2                     <tr>
 3                         <td class="auto-style2">用户名</td>
 4                         <td><asp:TextBox ID="hlUserName" runat="server"></asp:TextBox></td>
 5                     </tr>
 6                     <tr>
 7                         <td class="auto-style2">密码</td>
 8                         <td><asp:TextBox ID="hlPassWord" runat="server"></asp:TextBox></td>
 9                     </tr>
10                     <tr>
11                         <td class="auto-style2">性别</td>
12                         <td><asp:RadioButtonList ID="hlGenderType" runat="server" RepeatDirection="Horizontal"></asp:RadioButtonList></td>
13                     </tr>
14                     <tr>
15                         <td class="auto-style2">邮箱</td>
16                         <td><asp:TextBox ID="hlEmail" runat="server"></asp:TextBox></td>
17                     </tr>
18                     <tr>
19                         <td colspan="2" align="center"><asp:Button ID="btnAdd" runat="server" Text="添加" /></td>
20                     </tr>
21                 </table>
 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:数据修改

页面html
 1                 <table class="auto-style1">
 2                     <tr>
 3                         <td class="auto-style2">用户名</td>
 4                         <td><asp:TextBox ID="hl2UserName" runat="server"></asp:TextBox></td>
 5                     </tr>
 6                     <tr>
 7                         <td class="auto-style2">密码</td>
 8                         <td><asp:TextBox ID="hl2PassWord" runat="server"></asp:TextBox></td>
 9                     </tr>
10                     <tr>
11                         <td class="auto-style2">性别</td>
12                         <td><asp:RadioButtonList ID="hl2GenderType" runat="server" RepeatDirection="Horizontal"></asp:RadioButtonList></td>
13                     </tr>
14                     <tr>
15                         <td class="auto-style2">邮箱</td>
16                         <td><asp:TextBox ID="hl2Email" runat="server"></asp:TextBox></td>
17                     </tr>
18                     <tr>
19                         <td colspan="2" align="center"><asp:Button ID="btnSave" runat="server" Text="修改" Enabled="false" /></td>
20                     </tr>
21                 </table>
 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 中进行手动配置。

 

导航

目   录: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()
posted @ 2013-01-22 12:41  steden  阅读(779)  评论(0编辑  收藏  举报