轻量级ORM框架PetaPoco

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻量级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 person
        var 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 it
        var id = DB.Insert(person);


        // Obviously the ID returned will be the same as the one we set
        id.ShouldBe(person.Id);


        // Get a clone/copy from the DB
        var clone = DB.Single<Person>(id);


        // See, they're are the same
        clone.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 person
        var 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 person
        person.Age = 70;
        person.Name = "The PetaPoco";


        // Tell PetaPoco to update the DB
        DB.Update(person);


        // Get a clone/copy from the DB
        var clone = DB.Single<Person>(id);


        // See, the person has been updated
        clone.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 person
        var 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 it
        DB.Insert(person);
        
        // Obviously, we find only 1 matching person in the db
        var count = DB.ExecuteScalar<int>("SELECT COUNT([Id]) FROM [People] WHERE [Id] = @Id", new  person.Id );
        count.ShouldBe(1);
        
        // Tell PetaPoco to delete it
        DB.Delete(person);
        
        // Obviously, we should now have none in the db
        count = 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/

以上是关于轻量级ORM框架PetaPoco的主要内容,如果未能解决你的问题,请参考以下文章

PetaPoco 轻量级ORM 入门

C#轻型ORM框架PetaPoco试水

ORM框架PetaPoco API

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库(问题总结)

PetaPoco源代码学习--0.目录贴