PetaPoco 是一个开源轻量级ORM,够小,够快,单文件
在GitHub上有很高的人气 1377星,几年来作者一直在更新
当前版本6.0.317 - Netstandard 2.0(同时支持.net core、.net framework4.0+),也可下载单独的平台版本
github: https://github.com/CollaboratingPlatypus/PetaPoco
- 像Dapper 够快是因为使用dynamic生成分配列值和属性
- 像Massive 只有一个文件,很容易添加到任何项目的编译
- 像Massive 支持dynamic Expandos
- 不像Massive 不使用强类型POCO's
- 像ActiveRecord 支持对象和数据库表之间的关系
- 像SubSonic 支持使用T4模板生成poco类
功能特点
- 够小,完全没有任何依赖
- 配置简单
- 包含Insert/Delete/Update/Save and IsNew方法助手
- 根据请求自动分页,可以指定输出记录总数和指定页码
- 支持事务
- 更好的参数替换支持,抓取对象属性作为命名参数
- 优秀的性能,通过去除Linq使用Dynamic方法进行属性赋值
- 使得编写内联SQL SQL builder类更加容易
- 包含T4模板,可以快速生成Model类
- 方便扩展异常日志
- 支持SQL Server, SQL Server CE, MS Access, SQLite, MySQL, MariaDB, Firebird, PostgreSQL (支持Oracle但没有做集成测试).
- 支持Net Standard 2.0, .NET 4.0/4.5+ or Mono 2.8 及以上
- 有Xunit单元测试
- 有各种数据库的集成测试
- 开源
1.添加Nugit引用,搜索(PetaPoco)
此处下载的是第一个,会创建以下内容,所说的单文件就是只有PetaPoco.cs一个文件,项目中也可只保留此文件;Generated文件夹存放的是T4模板,用于生成实体类,如不需要可以删除
2.配置数据库连接,根据T4模板生成Model类,如不需要则可省略此步
<add name="SqlServer" connectionString="Data Source=.;uid=sa;pwd=we;database=JD;" providerName="System.Data.SqlClient"/>
3.保存后,会生成Database.cs文件内容如下:
4.如果数据库表有新增或修改字段,执行以下操作后,会自动生成相应的实体类。
3.实操:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PetaPocoDemo { class Program { static void Main(string[] args) { Person p1 = Db.Record<Person>.SingleOrDefault(1); //查询ID=1的记录 Db.Record<Person>.Delete(2); //删除ID=2的记录 Person person = new Person { Name = "曹操", Sex = "男", Age = 500 }; var db = Db.GetInstance(); db.Execute("truncate table person"); //保存一个实体 db.Save(person); db.Save(new Person { Name = "孙悟空" }); db.Save(new Person { Name = "孙悟空" }); db.Save("Person", "ID", new { Name = "张天天", ID = 3 }); //save根据主键决定是新增还是修改 //查询一个实体 person = db.Single<Person>(1); person = db.Single<Person>("where id=2"); //删除一个实体 db.Delete(person); db.Delete<Person>(1); db.Delete<Person>("where name='张天天'"); } } }
CREATE TABLE [dbo].[Person]( [ID] [INT] IDENTITY(1,1) NOT NULL, [Name] [VARCHAR](50) NULL, [Sex] [VARCHAR](50) NULL, [Age] [INT] NULL, [AddTime] [DATETIME] NULL, CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO