前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET轻量级ORM PetaPoco简介及使用示例代码

.NET轻量级ORM PetaPoco简介及使用示例代码

作者头像
郑子铭
发布2023-08-30 10:23:39
4000
发布2023-08-30 10:23:39
举报

简介

PetaPoco是一个轻量级的ORM(对象关系映射)框架,用于在.NET平台上进行数据访问和持久化操作。它提供了简单、快速、灵活的方式来与数据库进行交互,支持多种数据库类型,包括SQL Server、MySQL、SQLite、Oracle等。本文主要介绍PetaPoco的特点及优势,以及相关示例代码。

1、PetaPoco的特点及优势

PetaPoco是一个功能强大且易于使用的ORM框架,适用于.NET开发人员在各种项目中进行高效的数据访问。它的简洁性、轻量级和高性能使得它成为.NET开发社区中备受欢迎的选择之一。

1)简单易用

PetaPoco的API设计简洁,学习和使用都很容易。它提供了一套简单而直观的方法来执行数据库查询、插入、更新和删除等操作。

2)轻量级

PetaPoco是一个轻量级的框架,不依赖于复杂的配置和大量的依赖项。它的核心库非常小巧,对系统资源的消耗也很低,适用于各种规模的项目。

3)高性能

PetaPoco执行数据库操作的速度非常快,与其他ORM框架相比具有较低的性能开销。它采用了轻量级的对象映射机制,避免了过多的ORM特性和复杂的查询生成器。

4)灵活性

PetaPoco提供了灵活的查询和映射选项,可以满足各种复杂的数据访问需求。开发人员可以自由地编写SQL查询语句,并通过简单的映射机制将查询结果映射到对象模型中。

5)跨数据库支持

PetaPoco支持多种主流数据库类型,包括SQL Server、MySQL、SQLite、Oracle等,使开发人员能够在不同的数据库平台上进行统一的数据访问操作。

代码地址:https://github.com/CollaboratingPlatypus/PetaPoco

2、安装引用PetaPoco

可以通过NuGet包管理器在Visual Studio中安装PetaPoco。打开项目,右键点击项目,选择“Manage NuGet Packages”,搜索PetaPoco并安装。

3、PetaPoco使用示例代码

代码语言:javascript
复制

//初始化数据库连接
var db=new PetaPoco.Database("connectionStringName");


//查询单个值
long count=db.ExecuteScalar<long>("SELECT Count(*) FROM ShelfMissionInfo");


//返回一条记录
var a = db.SingleOrDefault<ShelfMissionInfo>("SELECT * FROM ShelfMissionInfo WHERE =@0", 1));

//返回一条记录,可以省略select,用where开头,会自动查询出全部字段(不是*号)
var a=db.SingleOrDefault<ShelfMissionInfo>("WHERE id=@0", 123);

//返回一条记录,可以From开头,会自动查询出全部字段(不是*号)
var a = db.SingleOrDefault<ShelfMissionInfo>("FROM whatever WHERE id=@0", 123);

//如果有主键,可以这样写
var a = db.SingleOrDefault<ShelfMissionInfo>(some_id);

//分页,分页的代码会自动生成
var result=db.Page<ShelfMissionInfo>(1, 20,"SELECT * FROM ShelfMissionInfo WHERE category=@0 ORDER BY date_posted DESC", "data");

var result = db.Page<ShelfMissionInfo>(pageNumber, pageSize, sql, args);
var totalNumber = result.TotalItems;//所有数据条数
var data = result.Items;//查询返回的数据
// 逐行查询每条记录,一次只从数据库表中取一条数据
foreach (var a in db.Query<ShelfMissionInfo>("SELECT * FROM ShelfMissionInfo"))
{
    Console.WriteLine("{0} - {1}", a.id, a.title);
}

//动态查询,返回dynamic,这种方式不支持自动添加Select
foreach (var a in db.Fetch<dynamic>("SELECT * FROM ShelfMissionInfo"))
{
    Console.WriteLine("{0} - {1}", a.id, a.title);
}
//查询单个字段,返回非Poco对象,支持所有的Type.IsValueType,字符串和byte数组
foreach (var x in db.Query<long>("SELECT id FROM ShelfMissionInfo"))
{
    Console.WriteLine("ShelfMissionInfo ID: {0}", x);
}

//检查主键是否存在
if (db.Exists<ShelfMissionInfo>(23)) 
    db.Delete <ShelfMissionInfo>(23);



//执行Sql,不返回值
db.Execute("DELETE FROM ShelfMissionInfo WHERE draft<>0");

//插入记录
// Create the ShelfMissionInfo
var a=new ShelfMissionInfo();
a.title="My new ShelfMissionInfo";
a.content="PetaPoco was here";
a.CreateTime=DateTime.UtcNow;
// Insert it
db.Insert(a);



//修改记录
// Get a record
var a=db.SingleOrDefault<ShelfMissionInfo>("SELECT * FROM ShelfMissionInfo WHERE id=@0", 123);
// Change it
a.content="PetaPoco was here again";
// Save it
db.Update(a);

//修改一个属性更简洁的写法
db.Update("ShelfMissionInfo", "id", new { ProductName="apple" }, 123);

//更新的另一种写法
db.Update<ShelfMissionInfo>("SET title=@0 WHERE id=@1", "apple", 123);

//更新指定的字段
a.Update(new string[] { "title" });
//也可以这样更新
db.Update<user>(u, new string[] { "title" });


//删除记录
//通过主键删除
db.Delete(a);

//自定义删除
db.Delete<ShelfMissionInfo>("WHERE id=@0", 123);


//事务,而且事物可以嵌套哦
using(var scope = db.GetTransaction())
{
    //todo: Do transacted updates here

    // Commit
    scope.Complete();

}


//支持存储过程,还不支持out 参数?
db.Query<type>("CALL storedproc")     // MySQL stored proc
db.Query<type>("EXECUTE myproc")        // MySQL prepared statement
db.Query<type>("EXECUTE storedproc")  // SQL Server


//执行Sql
databaseQuery.Execute("insert into temp1 (t) values (@0)", 
                new SqlParameter() { SqlDbType = SqlDbType.VarBinary, Value = DbNull.Value });




//组装Sql
var id=123;
var a=db.Query<ShelfMissionInfo>(PetaPoco.Sql.Builder
    .Append("SELECT * FROM ShelfMissionInfo")
    .Append("WHERE id=@0", id)
    .Append("AND CreateTime<@0", DateTime.UtcNow)
)


//动态组装Sql
var id=123;
var sql=PetaPoco.Sql.Builder
    .Append("SELECT * FROM ShelfMissionInfo")
    .Append("WHERE id=@0", id);

if (start_date.HasValue)
    sql.Append("AND CreateTime>=@0", start_date.Value);

if (end_date.HasValue)
    sql.Append("AND CreateTime<=@0", end_date.Value);

var a=db.Query<ShelfMissionInfo>(sql)

//通过命名的参数来组装Sql
sql.Append("AND CreateTime>=@start AND CreateTime<=@end", 
                new 
                { 
                    start=DateTime.UtcNow.AddDays(-2), 
                    end=DateTime.UtcNow 
                }
            );

//组装Sql还可以这样
var sql=PetaPoco.Sql.Builder()
            .Select("*")
            .From("ShelfMissionInfo")
            .Where("CreateTime < @0", DateTime.UtcNow)
            .OrderBy("CreateTime DESC");

//还可以更复杂
var sql = Sql.Builder
    .Select("*")
    .From("ShelfMissionInfo")
    .LeftJoin("Products").On("ShelfMissionInfo.id=Products.id");
本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-05,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、PetaPoco的特点及优势
  • 2、安装引用PetaPoco
  • 3、PetaPoco使用示例代码
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com