C# NPOCO 轻量级ORM框架(入门)

时间:2022-08-30 02:24:49

目前公司使用这个框架,搜不到很详细的中文资料。

只有英文wiki,所以翻译学习一下。

因为博主也是低水平的,可能会有一些理解不到位的地方。

可能会有错误的地方,如果有园友发现可以指出。

wiki地址:http://github.com/schotime/NPoco/wiki

第一个查询:

 public class User
{
public int UserId { get;set; }
public string Email { get;set; }
} using (IDatabase db = new Database("connStringName"))
{
List<User> users = db.Fetch<User>("select userId, email from users");
}

注: Database 需要关闭连接(可以把它当做你的对象)。

这是通过将列名映射的属性的名称User对象。匹配不区分大小写。没有使用映射(查询)。

映射

默认情况下不需要映射。如果不指定其属性将会假设 表名 是类名,主键是“ID”。

最常用的一些基本特性映射是:

  1. [TableName]需要一个“名称”参数,将被映射到表名。

  2. [PrimaryKey]表示表的主键列。多个键之间用逗号分隔。还有一个“增量”属性(AutoIncrement),用于指示是否将自动递增主键列例如标识列的SQL服务器。缺省为真。

  3. [Column]如果列名称不匹配的使用这种属性。

  4. [Ignore]此属性将被忽略,并且不被映射。

  5. [ResultColumn]标记为查询或计算结果列,这些属性将不被包括在插入或更新。注:需要被明确指定的SQL。它不会自动生成SQL。

  6. [ComputedColumn]标记为计算列属性,但他们将会自动生成SQL。

  7. [SerializedColumn](V3+)序列化的属性将序列化的数据的默认实现IColumnSerializer。有npoco.jsonnet库允许您使用JsonNetColumnSerializer

demo:

 [TableName("Users")]
[PrimaryKey("UserId")]
public class User
{
public int UserId { get;set; }
[Column("emailAddress")]
public string Email { get;set; }
[ResultColumn]
public string ExtraInfo { get;set; }
[Ignore]
public int Temp { get;set; }
}

查询单个对象

从数据库中查询一个对象可以几种不同方法来完成。

通过ID

最简单的方式是使用 SingleById<T>()方法。

 IDatabase db = new Database("connStringName");
User u = db.SingleById<User>();

通过SQL

如果您不显式提供 字段 将自动为您生成 ,子句将随后附上。

 User u = db.Single<User>("where emailaddress = @0", "email@domain.com");
or
User u = db.Single<User>("select u.* from users u where emailaddress = @0", "email@domain.com");

这两种方法都有一个“ordefault”方法。如果您不确定对象是否存在的话,请使用这些方法。如果对象不存在,而且您没有使用到 ordefault 就会引发空引用异常。

还有 First<T> FirstOrDefault<T> 如果有多条数据将抛出一个异常。如果不多于1个记录将返回结果。

插入,更新,删除

插入新记录

 IDatabase db = new Database("connStringName");
User u = new User()
{
Email = "name@domain.com",
LastLoggedIn = DateTime.UtcNow
}; db.Insert(u);

更新记录

 var user = db.SingleById();
user.Email = "new@domain.com";
db.Update(user);

删除记录

 var user = db.SingleById();
db.Delete(user);
or
db.Delete<User>();

覆盖或新建记录

 IDatabase db = new Database("connStringName");
User u = new User()
{
Email = "name@domain.com",
LastLoggedIn = DateTime.UtcNow
}; db.Save(u);

这样会插入一个新记录或更新一个现有记录。它是否存在是由主键确定的。

这个语句很危险,一定要确定你的对象里没有主键或主键不在数据库中,博主曾经用这个语句错误更新了正式环境几百条数据!

查询列表

获取所有:

 List<User> users = db.Fetch<User>();

标准获取:

 List<User> users = db.Fetch<User>("where isActive = 1");

使用SQL:

 List<User> users = db.Fetch<User>("select u.* from users where u.isActive = 1");

懒惰模式

警告:以下方法Query<T>使用生成的关键字。运行该查询的结果都j将被遍历。如果你不完全理解这一概念,请使用 Fetch<T>

 List<User> users = db.Query<User>("select u.* from users where u.isActive = 1");

查询分页

主要有两种方法用于查询分页。

Page<T>

 IDatabase db = new Database("connStringName");
Page<T> pagedUsers = db.Page<User>(, , "select u.* from users u order by userid");

其中Page<T>被定义为:

 public class Page<T>
{
public long CurrentPage { get; set; }
public long TotalPages { get; set; }
public long TotalItems { get; set; }
public long ItemsPerPage { get; set; }
public List<T> Items { get; set; }
}

注意:您必须在SQL语句中提供一个 order by 语句,以便查询知道您希望数据分页的顺序。
页面的第一个参数是页面编号。这个数字从第一个页面的1开始。第二个参数是页面的大小。在上面的示例中,将返回包含10个用户的第二个页面。

SkipTake<T>

SkipTake<T> 方法与在LINQ中跳过采取方法非常相似。它具有与页面< T >方法相同的参数数量,但第一个参数不是页码,而是记录的数量(即要取的记录数量?)。第二个参数是跳过x个记录之后返回的记录数(即开始的位置?)。为了返回与Page<T>方法相同的结果,查询将如下所示:

 List<User> users = db.SkipTake<User>(, , "select u.* from users u order by userid");

对事务的支持

示例1

 using (IDatabase db = new Database("connStringName"))
{
db.BeginTransaction();
//Your CRUD operation here
db.CompleteTransaction();
}

示例2

 using (IDatabase db = new Database("connStringName"))
{
using (var transaction = db.GetTransaction())
{
//Your CRUD operation here
transaction.Complete();
}
}

翻译时间  2017/8/15

C# NPOCO 轻量级ORM框架(入门)的更多相关文章

  1. PetaPoco轻量级ORM框架 - 入门安装

    PetaPoco 是一个开源轻量级ORM,够小,够快,单文件 在GitHub上有很高的人气 1377星,几年来作者一直在更新 当前版本6.0.317 - Netstandard 2.0(同时支持.ne ...

  2. C&num; NPOCO 轻量级ORM框架(进阶)

    继续翻译NPOCO wiki. 这篇将home上 下面的几个页面翻译. wiki地址:https://github.com/schotime/NPoco/wiki 上一篇: http://www.cn ...

  3. &period;NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

  4. C&num; 性能优化 之 秒表 Stopwatch。 Dapper一个和petapoco差不多的轻量级ORM框架

    Sweet小马 小马同学的编程日记. C# 性能优化 之 秒表 Stopwatch. 生词解释:Diagnostics[,daɪəg'nɑstɪks] n.诊断学 using System.Diagn ...

  5. Farseer&period;net轻量级开源框架 入门篇:使用前说明

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 框架性能测试 下一篇:Farseer.net轻量级开源框架 入门篇: 增.删.改. ...

  6. Farseer&period;net轻量级开源框架 入门篇:逻辑层的选择

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门 ...

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

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 ...

  8. Farseer&period;net轻量级开源框架 入门篇:添加数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...

  9. Farseer&period;net轻量级开源框架 入门篇:修改数据详解

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 下一篇:Farseer.net轻量级开源框架 入门篇: 删除数据详解 ...

随机推荐

  1. SPOJ PHRASES 后缀数组

    题目链接:http://www.spoj.com/problems/PHRASES/en/ 题意:给定n个字符串,求一个最长的子串至少在每个串中的不重叠出现次数都不小于2.输出满足条件的最长子串长度 ...

  2. 移动端 ios 长按复制兼容方案

    移动端页面,需要复制一段文字码. 在ios中,长按文字区域,默认选中的范围,超出了我长按的文字区域, 把上面的图片和下面的另一个div的文字也给我包含进来了,并不是我想要的! 举个例子: 如下图: 1 ...

  3. HackerRank Ice Cream Parlor

    传送门 Ice Cream Parlor Authored by dheeraj on Mar 21 2013 Problem Statement Sunny and Johnny together ...

  4. Orace数据库锁表的处理与总结&lt&semi;摘抄与总结三&gt&semi;

    当Oracle数据库发生TX锁等待时,如果不及时处理常常会引起Oracle数据库挂起,或导致死锁的发生,产生ORA-60的错误. TX锁等待的分析 Oracle数据库中一般使用行级锁. 当Oracle ...

  5. MySQL(13):Select-order by

    1. 按照字段值进行排序: 语法:        order by 字段  升序|降序(asc|desc) 允许多字段排序,指的是,先按照第一个字段排序,如果说,不能区分,才使用第二个字段,以此类推. ...

  6. sql 2000 &quot&semi;无法执行查询&comma;因为一些文件缺少或未注册&quot&semi;的

    sql 2000 "无法执行查询,因为一些文件缺少或未注册"的解决办法 在SQL server 2000中打开表查看数据的时候,提示说“无法执行查询,因为一些文件缺少或未注册” 用 ...

  7. DashBoard创建各种表(二)

    添加范围过滤器 “ 范围过滤器”允许您将过滤应用于其他仪表板项.此项目显示带有选择拇指的图表,允许您过滤掉沿参数轴显示的值. 如图,可以根据选择不同的CategorySales范围显示图表1的内容了. ...

  8. VS下载Github的项目引用报错

    错误如下 1.添加新的Nuget包源 添加新的源 https://www.nuget.org/api/v2/ 2.还原Nuget包 3.升级Visual Studio到最新 工具-->获取工具和 ...

  9. mysql 安装问题一:由于找不到MSVCR120&period;dll&comma;无法继续执行代码&period;重新安装程序可能会解决此问题。

    这种错误是由于未安装  vcredist  引起的 下载  vcredist  地址:https://www.microsoft.com/zh-CN/download/details.aspx?id= ...

  10. Django --需求文件requirements&period;txt

    在虚拟环境中使用pip生成: (venv) $ pip freeze >requirements.txt 当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令: (v ...