导航

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

上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射

下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射

前言

  我们知道对于关系数据库,视图的出现可以在一定的情况下减少因要进行数据关联而带来的大量SQL语句,它可以让我们就像访问一张表一样的简单操作。

  作为ORM来说,支持视图也是一项最基础的工作。然而大部份的ORM中,对视图没有特意去提供这个类,因为视图的SQL与表的SQL是一致的,因此可以将视图当成表来访问操作。

  而在Farseer.Net里为视图提供了专门的类的目的是告诉开发者,它是一个只读“表”,仅读、而不能进行任何数据更新操作。

ViewSet

  在前一篇文章里,我们学会了视图的映射,其它它与表的映射是基本一致的。除了是使用:TableSet,视图使用的是ViewSet

  到目前为止,相信大家也知道了xxxSet的作用,就是为这些特定“表”、“视图”、“存储过程”提供它们专用的方法,以便我们对数据库进去操作。

  前面也讲到过ViewSetTableSet他们都继承了:DbReadSet<TSet, TEntity> 这个类

    /// <summary>
/// 视图操作
/// </summary>
/// <typeparam name="TEntity">实体</typeparam>
public sealed class ViewSet<TEntity> : DbReadSet<ViewSet<TEntity>, TEntity> where TEntity : class, new() /// <summary>
/// 表操作
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public sealed class TableSet<TEntity> : DbReadSet<TableSet<TEntity>, TEntity> where TEntity : class, new()

  换句话说,他们都共同包含了DbReadSet提供的方法、属性

  在表的数据操作一篇中,已经讲到了如何进行操作一张表。包括了读数据、写数据这两类,而从字面理解上我们也知道了DbReadSet是为读数据提供的一个数据库操作类。

  因此视图的操作,就相当于是表的读操作那一部份。

  既然如此,那么很明显,它们的调用方式也是一样的。

静态调用方式
 // 在查询时,进行字段筛选,否则将以*号查询
View.Data.Account.Select(o=>o.ID).Select(o=>new {o.UserName,o.LoginCount});
// 查询或者更新时,限定条件
View.Data.Account.Where(o=>o.ID);
// 排序方式
View.Data.Account.Desc(o=>o.ID).Asc(o=>new {o.LoginCount,o.CreateAt});
View.Data.Account.Asc(o=>o.ID);
实例化调用
 using(var context = new View())
{
context.Account.Select(o=>new{ o.ID, o.UserName}).Where(o=>o.ID > ).Desc(o=>o.ID)
}
ViewSet提供的方法
        /// <summary> 查询多条记录(不支持延迟加载) </summary>
/// <param name="top">限制显示的数量</param>
/// <param name="isDistinct">返回当前条件下非重复数据</param>
/// <param name="isRand">返回当前条件下随机的数据</param>
public virtual DataTable ToTable(int top = , bool isDistinct = false, bool isRand = false) /// <summary> 查询多条记录(不支持延迟加载) </summary>
/// <param name="pageSize">每页显示数量</param>
/// <param name="pageIndex">分页索引</param>
/// <param name="isDistinct">返回当前条件下非重复数据</param>
/// <returns></returns>
public virtual DataTable ToTable(int pageSize, int pageIndex, bool isDistinct = false) /// <summary> 查询多条记录(不支持延迟加载) </summary>
/// <param name="pageSize">每页显示数量</param>
/// <param name="pageIndex">分页索引</param>
/// <param name="recordCount">总记录数量</param>
/// <param name="isDistinct">返回当前条件下非重复数据</param>
public virtual DataTable ToTable(int pageSize, int pageIndex, out int recordCount, bool isDistinct = false) /// <summary> 查询多条记录(不支持延迟加载) </summary>
/// <param name="top">限制显示的数量</param>
/// <param name="isDistinct">返回当前条件下非重复数据</param>
/// <param name="isRand">返回当前条件下随机的数据</param>
public virtual List<TEntity> ToList(int top = , bool isDistinct = false, bool isRand = false) /// <summary>
/// 查询多条记录(不支持延迟加载)
/// </summary>
/// <param name="pageSize">每页显示数量</param>
/// <param name="pageIndex">分页索引</param>
/// <param name="isDistinct">返回当前条件下非重复数据</param>
/// <returns></returns>
public virtual List<TEntity> ToList(int pageSize, int pageIndex, bool isDistinct = false) /// <summary>
/// 查询多条记录(不支持延迟加载)
/// </summary>
/// <param name="pageSize">每页显示数量</param>
/// <param name="pageIndex">分页索引</param>
/// <param name="recordCount">总记录数量</param>
/// <param name="isDistinct">返回当前条件下非重复数据</param>
public virtual List<TEntity> ToList(int pageSize, int pageIndex, out int recordCount, bool isDistinct = false) /// <summary>
/// 返回筛选后的列表
/// </summary>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="T">实体类的属性</typeparam>
/// <param name="select">字段选择器</param>
public virtual List<T> ToSelectList<T>(Expression<Func<TEntity, T>> select) /// <summary>
/// 返回筛选后的列表
/// </summary>
/// <param name="top">限制显示的数量</param>
/// <param name="select">字段选择器</param>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="T">实体类的属性</typeparam>
public virtual List<T> ToSelectList<T>(int top, Expression<Func<TEntity, T>> select) /// <summary>
/// 返回筛选后的列表
/// </summary>
/// <param name="select">字段选择器</param>
/// <param name="lstIDs">o => IDs.Contains(o.ID)</param>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="T">实体类的属性</typeparam>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual List<T> ToSelectList<T>(List<T> lstIDs, Expression<Func<TEntity, T>> select, string memberName = null) /// <summary>
/// 返回筛选后的列表
/// </summary>
/// <param name="select">字段选择器</param>
/// <param name="lstIDs">o => IDs.Contains(o.ID)</param>
/// <param name="top">限制显示的数量</param>
/// <typeparam name="TEntity">实体类</typeparam>
/// <typeparam name="T">实体类的属性</typeparam>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual List<T> ToSelectList<T>(List<T> lstIDs, int top, Expression<Func<TEntity, T>> select, string memberName = null) /// <summary>
/// 查询单条记录(不支持延迟加载)
/// </summary>
public virtual TEntity ToEntity() /// <summary>
/// 获取单条记录
/// </summary>
/// <typeparam name="T">ID</typeparam>
/// <param name="ID">条件,等同于:o=>o.ID.Equals(ID) 的操作</param>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual TEntity ToEntity<T>(T ID, string memberName = null) /// <summary>
/// 查询数量(不支持延迟加载)
/// </summary>
public virtual int Count(bool isDistinct = false, bool isRand = false) /// <summary>
/// 获取数量
/// </summary>
/// <typeparam name="T">ID</typeparam>
/// <param name="ID">条件,等同于:o=>o.ID.Equals(ID) 的操作</param>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual int Count<T>(T ID, string memberName = null) /// <summary>
/// 获取数量
/// </summary>
/// <typeparam name="T">ID</typeparam>
/// <param name="lstIDs">条件,等同于:o=> IDs.Contains(o.ID) 的操作</param>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual int Count<T>(List<T> lstIDs, string memberName = null) /// <summary>
/// 查询数据是否存在(不支持延迟加载)
/// </summary>
public virtual bool IsHaving() /// <summary>
/// 判断是否存在记录
/// </summary>
/// <typeparam name="T">ID</typeparam>
/// <param name="ID">条件,等同于:o=>o.ID == ID 的操作</param>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual bool IsHaving<T>(T ID, string memberName = null) /// <summary>
/// 判断是否存在记录
/// </summary>
/// <typeparam name="T">ID</typeparam>
/// <param name="lstIDs">条件,等同于:o=> IDs.Contains(o.ID) 的操作</param>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual bool IsHaving<T>(List<T> lstIDs, string memberName = null) /// <summary>
/// 查询单个值(不支持延迟加载)
/// </summary>
public virtual T GetValue<T>(Expression<Func<TEntity, T>> fieldName, T defValue = default(T)) /// <summary>
/// 查询单个值
/// </summary>
/// <typeparam name="T1">ID</typeparam>
/// <typeparam name="T2">字段类型</typeparam>
/// <param name="ID">条件,等同于:o=>o.ID.Equals(ID) 的操作</param>
/// <param name="fieldName">筛选字段</param>
/// <param name="defValue">不存在时默认值</param>
/// <param name="memberName">条件字段名称,如为Null,默认为主键字段</param>
public virtual T2 GetValue<T1, T2>(T1 ID, Expression<Func<TEntity, T2>> fieldName, T2 defValue = default(T2), string memberName = null) /// <summary>
/// 累计和(不支持延迟加载)
/// </summary>
public virtual T Sum<T>(Expression<Func<TEntity, T>> fieldName, T defValue = default(T)) /// <summary>
/// 查询最大数(不支持延迟加载)
/// </summary>
public virtual T Max<T>(Expression<Func<TEntity, T>> fieldName, T defValue = default(T)) /// <summary>
/// 查询最小数(不支持延迟加载)
/// </summary>
public virtual T Min<T>(Expression<Func<TEntity, T>> fieldName, T defValue = default(T))

  可以很清楚的看出,上面提供的方法均是读操作。而没有任何的写操作。同时这部份方法也是被TableSet支持的(又啰嗦了,照顾下新人)。

  比如我们获取一条数据是:

View.Data.Account.Select(o => o.ID).Select(o => o.Name).Where(o => o.ID > ).ToEntity();

  我们获取一批数据是:

View.Data.Account.Select(o => o.ID).Select(o => o.Name).Where(o => o.ID > ).Asc(o => o.ID).ToList();

  其它的就不再举例了。大家可以自行尝试下。

总结

  视图的方法,实际就是等同于表的读方法那部份,因此大家学会了表的操作之后,一样懂得如何操作视图(方法、参数一致)。

  由于Farseer.net暂时未提供复杂的SQL查询功能。因此用视图来进行转化下也是一种很方便的手段。

导航

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

上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射

下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射

广告时间

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

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

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

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

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

 Table.Data.User.Where(o=>o.ID == ).ToEntity();
Table.Data.User.Where(o=>o.ID > ).ToList();
Table.Data.User.Where(o=>o.ID != ).Delete();
Table.Data.User.Where(o=>o.ID != ).AddUp(o=>o.LoginCount, );
Table.Data.User.Where(o=>o.ID == ).Update(new User{ UserName = "newName" });
Table.Data.User.Insert(new User{ UserName = "newName" });

Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作的更多相关文章

  1. Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...

  2. Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作 下一篇:Farseer.net轻量级ORM开源 ...

  3. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作 下一篇:Farseer.net轻量级ORM开源框 ...

  4. Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇:Farseer.net轻量级ORM开源 ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...

  6. Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文 下一篇:Farseer.net轻量级ORM开源框 ...

  7. Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明 下一篇:Farseer.net轻量级ORM开源框架 ...

  8. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  9. Farseer.net轻量级ORM开源框架 V1.x 教程目录

    本篇教程将以Ver 1.x版本进行详细使用讲解 大家有任何疑问可以加入我们的官方QQ群进行讨论.QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net 整个 ...

随机推荐

  1. su 和 su- 会影响环境变量

    大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和 ...

  2. C++ 函数部分(2)

    C++函数的递归调用 函数可以直接或间接地调用自身,称为递归调用.所谓直接调用自身,就是指在一个函数的函数体中出现了对自身的调用表达式,例如: void fun1(void) { //do somet ...

  3. Nginx——静态资源服务器(一)

    java web的项目中,我们经常将项目部署到Tomcat或者jetty上,可以通过Tomcat或者jetty启动的服务来访问静态资源.但是随着Nginx的普及,用Nginx来作为静态资源服务器,似乎 ...

  4. Java 内存管理、JVM 工作原理与 Java 运行时系统

    Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...

  5. AutoIT: FileReadLine可以对文件进行读行操作

    $fHandle= ) Then $line= FileReadLine($fHandle) Then ExitLoop Wend EndIf FileClose($fHandle)

  6. bzoj4196 [Noi2015]软件包管理器——树链剖分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4196 树链剖分. 代码如下: #include<iostream> #inclu ...

  7. Ubuntu下搭建基于apache2的gerrit+gitweb服务器

    说明:Ubuntu版本12.04 1. 配置gerrit管理帐号 1 sudo adduser gerrit 增加sudo权限: 1 sudo usermod -a -G sudo gerrit 切换 ...

  8. 关于loadrunner运行场景时提示“初始化失败,通信错误”的解决方案

    1)在loadrunner的安装目录下的bin文件夹下有个“wlrun.exe”的文件 2)右键点击“属性”->"兼容性"->兼容模式中选择“windows xp(se ...

  9. bzoj 1061: [Noi2008]志愿者招募【最小费用最大流】

    神奇的建图:连接(s,1,inf,0)(n+1,t,inf,0),对于1~n连接(i,i+1,inf-a[i],0),对于每个志愿者(s,t,c),连接(s,t+1,inf,c). 因为从s开始的流是 ...

  10. [App Store Connect帮助]八、维护您的 App(1)App 维护概述

    您在 App Store 上发行 App 后,需要执行一些任务来回复顾客反馈并在整个产品周期内维护您的 App.您可以按任何顺序执行这些任务. 监控顾客评论.销售情况和分析 您可以在 App 页面的“ ...