轻量级ORM框架PetaPoco

1、简介

PetaPoco是一个小型、快速、单文件的微型ORM(Object Relational Mapper)框架,可在.NET和Mono环境运行。

https://github.com/CollaboratingPlatypus/PetaPoco

2、特点

PetaPoco 是一个用于 .NET 的小型且快速的微型 ORM

  • 与Dapper一样,它很快,因为它使用动态方法生成 (MSIL) 将列值分配给属性

  • 像Massive一样,它现在也支持动态 Expandos

  • 与ActiveRecord一样,它支持对象和数据库表之间的密切关系

  • 与SubSonic一样,它支持使用 T4 模板生成 poco 类(仅限 V5)

  • 与Massive一样,它以单个文件的形式提供,您可以轻松地将其添加到任何项目或编译。(仅限 V5)

3、功能

  • 很小,绝对没有依赖!

  • 异步或同步,选择权在您。(又名异步)(V6)

  • 与严格未修饰的 POCO 或归属的几乎 POCO 一起使用。

  • 易于配置,包括开箱即用的流畅配置。

  • 插入/删除/更新/保存和 IsNew 的辅助方法

  • 分页请求会自动计算出总记录数并获取特定页面。

  • 简单的交易支持。

  • 更好的参数替换支持,包括从对象属性中获取命名参数。

  • 通过使用 DynamicMethod 生成消除 Linq 和快速属性分配来获得出色的性能。

  • 查询语言是好的 ole SQL。

  • 包括一个低摩擦的 SQL 构建器类,使编写内联 SQL变得更加容易。

  • 包括 T4 模板以自动为您生成 POCO 类。(V5)

  • 用于记录异常、安装值转换器和将列映射到没有属性的属性的挂钩。

  • 适用于 SQL Server、SQL Server CE、MS Access、SQLite、MySQL、MariaDB、Firebird 和 PostgreSQL。(Oracle 支持但没有集成测试)。

  • 在 Net Standard 2.0、.NET 4.0/4.5+ 或 Mono 2.8 及更高版本下工作。

  • 有Xunit单元测试。

  • 已支持 DBs 集成测试。

  • 开源(MIT 许可证或 Apache 2.0)

4、简单例子

添加

[Fact]public void Insert(){// Create the personvar person = new Person { Id = Guid.NewGuid(), Name = "PetaPoco", Dob = new DateTime(2011, 1, 1), Age = (DateTime.Now.Year - 2011), Height = 242 };// Tell PetaPoco to insert itvar id = DB.Insert(person);// Obviously the ID returned will be the same as the one we setid.ShouldBe(person.Id);// Get a clone/copy from the DBvar clone = DB.Single<Person>(id);// See, they're are the sameclone.ShouldBe(person);// But, they're not not reference equals as PetaPoco doesn't cache because it's a MircoORM.person.Equals(clone).ShouldBeFalse();}

更新

// Create and insert the personvar person = new Person { Id = Guid.NewGuid(), Name = "PetaPoco", Dob = new DateTime(2011, 1, 1), Age = (DateTime.Now.Year - 2011), Height = 242 };var id = DB.Insert(person);// Update a few properties of the personperson.Age = 70;person.Name = "The PetaPoco";// Tell PetaPoco to update the DBDB.Update(person);// Get a clone/copy from the DBvar clone = DB.Single<Person>(id);// See, the person has been updatedclone.Id.ShouldBe(person.Id);clone.Dob.ShouldBe(person.Dob);clone.Height.ShouldBe(person.Height);clone.Age.ShouldBe(person.Age);clone.Name.ShouldBe(person.Name);

删除

// Create the personvar person = new Person { Id = Guid.NewGuid(), Name = "PetaPoco", Dob = new DateTime(2011, 1, 1), Age = (DateTime.Now.Year - 2011), Height = 242 };// Tell PetaPoco to insert itDB.Insert(person);// Obviously, we find only 1 matching person in the dbvar count = DB.ExecuteScalar<int>("SELECT COUNT([Id]) FROM [People] WHERE [Id] = @Id", new { person.Id });count.ShouldBe(1);// Tell PetaPoco to delete itDB.Delete(person);// Obviously, we should now have none in the dbcount = DB.ExecuteScalar<int>("SELECT COUNT([Id]) FROM [People] WHERE [Id] = @0", person.Id);count.ShouldBe(0);

查询

var inmemorylist = db.Fetch<article>("SELECT * FROM Articles") 
foreach (var a in inmemorylist)
{    Console.WriteLine($"{a.Id} - {a.Title}");
}Console.WriteLine($"Count: {inmemorylist.Count}");
foreach (var a in db.Query<article>("SELECT * FROM Articles"))
{    Console.WriteLine($"{a.Id} - {a.Title}");
}

更多方法见

https://github.com/CollaboratingPlatypus/PetaPoco/wiki/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]CentOS 7忘记root密码解决办法

转自&#xff1a;http://www.linuxidc.com/Linux/2016-08/134034.htm 亲测可用&#xff01; CentOS 7 root密码的重置方式和CentOS 6完全不一样&#xff0c;CentOS 7与之前的版本6变化还是比较大的&#xff0c;以进入单用户模式修改root密码为例。 1.重启开机按esc 2.按e 3.编…

美链BEC合约漏洞技术分析

这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈。这篇文章就来分析下BEC智能合约的漏洞 <!-- more --> 漏洞攻击交易 我们先来还原下攻击交易&#xff0c;这个交易可以在这个链接查询到。我截图给大家看一下&#xff1a; 攻击者向两个账号转…

vue 公众号扫描_vue编写微信公众号打开相机功能

vue编写微信公众号打开相机功能&#xff0c;什么都不多说直接上代码页面布局代码class"previewer-demo-img":key"index":src"item.src"width"100"click"previewImg(index)">1.微信config初始化前端代码initWxConfig() {l…

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能&#xff0c;简短的内容&#xff0c;深入的理解&#xff0c;Always to review the basics。 NOT IN、NOT EXISTS、LEFT JOIN...IS NULL性能分析 我们首先创建测试表 USE TSQL2012 GOCREATE SCHEMA [c…

global using 的另类用法

前言global using 指令在 C# 10 中被引入&#xff0c;意味着 using 将应用于编译中的所有文件&#xff08;通常是一个项目&#xff09;。比如&#xff1a;global using System.Text;则在同一项目的其他位置&#xff0c;可以直接使用 System.Text 下的所有类型而无需再次声明 us…

boost asio resolver

asio 中的resolver一般用于将host等信息转化为socket信息&#xff0c;类似于getaddrinfo() 以下代码 boost::asio::io_service io;tcp::resolver resolver(io);tcp::resolver::query query(boost::asio::ip::host_name(), "80");tcp::resolver::iterator endpoint_it…

利用 Node.js 实现 SAP Hana 数据库编程接口

为什么80%的码农都做不了架构师&#xff1f;>>> 自 SAP HANA SP 11 之后&#xff0c;可以使用 Node.js 作为 Hana 的编程接口。SAP 将 Application server 简称为 XS。现在 XS 已经演化为 Advanced 版本。为了区别&#xff0c;早期的 XS 被称为 XS Classical。 从下…

WPF 实现自绘验证码

WPF 实现自绘验证码控件名&#xff1a;VerifyCode作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;如何通过DrawingV…

css中的单位换算_CSS单位px、em、rem及它们之间的换算关系

作者:WangMin格言:努力做好自己喜欢的每一件事国内的设计师大都喜欢用px&#xff0c;而国外的网站大都喜欢用em和rem&#xff0c;那么三者的区别与优势是什么&#xff1f;接下来我们就来学习一下吧&#xff01;单位px、em、rem分别表示什么&#xff1f;1、 px(Pixel) 相对于显示…

IIS上部署Net.Core

部署: 1、安装vc_redist.x64vc_redist.x64 2、安装DotNetCore.1.0.0.RC2-WindowsHosting 3、安装DotNetCore.1.0.0-SDK.Preview2-x64 4、控制台命令执行&#xff1a;dotnet -version&#xff0c;确认是否执行成功。成功则Net.Core安装完成 5、发布参考&#xff1a;IIS上部署Net…

【MAC】Ncnn 编译so文件方案

【MAC】Ncnn 编译so文件方案 1、下载ncnn github地址是&#xff1a;https://github.com/Tencent/ncnn 指定目录&#xff1a;在终端或者git管理工具 输入&#xff1a;git clone https://github.com/Tencent/ncnn.git 2、编译Ncnn 2.1 Mac平台 安装cmake、wget&#xff08;根据实…

SSM学习注意杂记

2019独角兽企业重金招聘Python工程师标准>>> 1.spring导包时一定要版本对应&#xff0c;最好不要导不同版本的包&#xff0c;还有mybatis的包&#xff0c;springmvc的包&#xff0c;三个框架的包都需配套&#xff0c;要不然会出现一些想象不到的错误。 2.mybatis写映…

《ASP.NET Core 6框架揭秘》实例演示[15]:针对控制台的日志输出

针对控制台的ILogger实现类型为ConsoleLogger&#xff0c;对应的ILoggerProvider实现类型为ConsoleLoggerProvider&#xff0c;这两个类型都定义在 NuGet包“Microsoft.Extensions.Logging.Console”中。ConsoleLogger要将一条日志输出到控制台上&#xff0c;首选要解决的是格式…

基于mysql数据库的应用_MySQL数据库应用

参考资料&#xff1a;准备软件&#xff1a;mysql-5.5.13-win32.msi、MySQL安装图解.doc、Navicat_for_MySQL_10.0.5.0_XiaZaiBa.exe、mysqldriver.jar、eclipseMySQL基本操作登陆&#xff1a;mysql -u 用户名 -p 密码显示数据库&#xff1a;show databases;使用数据库&#xff…

《HeadFirst Python》第一章学习笔记

对于Python初学者来说&#xff0c;舍得强烈推荐从《HeadFirst Python》开始读起&#xff0c;这本书当真做到了深入浅出&#xff0c;HeadFirst系列&#xff0c;本身亦是品质的保证。这本书舍得已在《Python起步&#xff1a;写给零编程基础的童鞋》一文中提供了下载。为了方便大家…

Oracle-13:Oracle中的表分区

------------吾亦无他,唯手熟尔&#xff0c;谦卑若愚&#xff0c;好学若饥------------- 本篇博客记录了表分区 表分区的含义&#xff1a; 典型的拿空间换时间的案例&#xff01; 表分区对一张表进行分区&#xff0c;分区之后表中的数据存在相对应的分区内&#xff08;可以是不…

js控制图像等比例缩放

<!DOCTYPE html> <html> <head><title>图片内部放大效果</title> <meta charset"utf-8"> <style type"text/css">#imgborder{ width: 200px;height: 160px;border: 3px solid #000; overflow: hidden;position:…

mysql一张表最多多少索引_MySQL一个索引最多有多少个列?真实的测试例子

MySQL一个索引最多有多少个列&#xff1f;真实的测试例子更新时间&#xff1a;2009年07月01日 22:22:21 作者&#xff1a;MySQL一个索引最多有多少个列&#xff1f;下面是具体的实现代码。最多16列。create table test (f1 int,f2 int,f3 int,f4 int,f5 int,f6 int,f7 int,f8…

.NET Core 使用 LibreOffice 实现 Office 预览(Docker 部署)

前些年做云盘产品的时候&#xff0c;一个很核心的功能就是 Office 文件预览&#xff0c;当时还没有使用 .NET Core ,程序部署在 Windows Server 服务器上&#xff0c;文件预览的方案采用了微软的 OWA 。目前在做的零代码产品中的表单附件控件&#xff0c;同样面临着 Office 文件…

es6(五):函数的扩展

函数参数的默认值 function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hellofunction Point(x 0, y 0) {this.x x;this.y y; }var p new Point(); p // { x: 0, y: 0 }函数length 的属性 指定了…