C# NPOCO 轻量级ORM框架(入门)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# NPOCO 轻量级ORM框架(入门)

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

 2017/8/16 3:31:21  Aaxuan  程序员俱乐部  我要评论(0)
  • 摘要:目前使用这个框架,搜不到中文资料。只有英文wiki,翻译学习摘录一下。大部分是机翻的,改了一些地方,因为博主也是低水平的,标红的是瞎理解的。可能会有错误的地方,如果有园友发现可以指出。wiki地址:http://github.com/schotime/NPoco/wiki第一个查询:1publicclassUser2{3publicintUserId{get;set;}4publicstringEmail{get;set;}5}67using(IDatabasedb=newDatabase
  • 标签:C#

目前使用这个框架,搜不到中文资料。

只有英文wiki,翻译学习摘录一下。

大部分是机翻的,改了一些地方,

因为博主也是低水平的,标红的是瞎理解的。

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

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

 

第一个查询:

 1 public class User 
 2 {
 3     public int UserId { get;set; }
 4     public string Email { get;set; }
 5 }
 6 
 7 using (IDatabase db = new Database("connStringName")) 
 8 {
 9     List<User> users = db.Fetch<User>("select userId, email from users");
10 }

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

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

 

映射

 

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

最常用的基本属性映射是:

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

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

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

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

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

  6. [ComputedColumn]标记为计算列属性,但是他们的结果栏属性被自动生成SQL

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

demo:

 1 [TableName("Users")]
 2 [PrimaryKey("UserId")]
 3 public class User
 4 {
 5     public int UserId { get;set; }
 6     [Column("emailAddress")]
 7     public string Email { get;set; }
 8     [ResultColumn]
 9     public string ExtraInfo { get;set; }
10     [Ignore]
11     public int Temp { get;set; }
12 }

 

查询单个对象

 

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

通过ID

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

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

通过SQL

下面你可以看到,只有其中的规定。如果您不显式提供选择的条款将自动为您生成和在其中将随后附上。

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

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

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

 

插入,更新,删除

插入新记录

1 IDatabase db = new Database("connStringName");
2 User u = new User() 
3 {
4     Email = "name@domain.com",
5     LastLoggedIn = DateTime.UtcNow
6 };
7 
8 db.Insert(u);

更新记录

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

删除记录

1 var user = db.SingleById(1);
2 db.Delete(user);
3 or
4 db.Delete<User>(1);

覆盖或新建记录

1 IDatabase db = new Database("connStringName");
2 User u = new User() 
3 {
4     Email = "name@domain.com",
5     LastLoggedIn = DateTime.UtcNow
6 };
7 
8 db.Save(u);

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

 

查询列表

 

获取所有:

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

标准获取:

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

使用SQL:

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

懒惰

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

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

 

header-title instapaper_title" style="text-align: center;">查询分页

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

Page<T>

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

其中Page<T>被定义为:

1 public class Page<T> 
2 {
3     public long CurrentPage { get; set; }
4     public long TotalPages { get; set; }
5     public long TotalItems { get; set; }
6     public long ItemsPerPage { get; set; }
7     public List<T> Items { get; set; }
8 }

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

SkipTake<T>

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

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

 

对事务的支持

 

Example 1

1 using (IDatabase db = new Database("connStringName")) 
2 {
3     db.BeginTransaction();
4     //Your CRUD operation here
5     db.CompleteTransaction();
6 }

Example 2

1 using (IDatabase db = new Database("connStringName")) 
2 {
3     using (var transaction = db.GetTransaction())
4     {
5         //Your CRUD operation here
6         transaction.Complete();
7     }
8 }

 

翻译时间  2017/8/15

发表评论
用户名: 匿名