一、PetaPoco开源
PetaPoco是一个开源的、轻量级的ORM框架,它是约翰·戴维斯(John P. Davies)写的。PetaPoco意为“小Poco”(“Poco”是“Plain Old CLR Object”的缩写,它代表一种纯洁的、面向对象的编程思想)。通过PetaPoco,我们可以简化数据库访问过程,将数据从数据库查询或保存到我们的类中,省去了很多重复的代码。PetaPoco支持.NET Framework 3.5+、.NET Core 1.0+和Mono。
二、PetaPoco in
在使用PetaPoco时,我们需要在项目中添加PetaPoco的引用。
PM> Install-Package PetaPoco
三、PetaPoco 异步
PetaPoco也支持异步操作,从而提高应用程序的性能。下面是一个异步获取单个实体的示例:
public async Task<Product> GetProductAsync(int productId) { using (var db = new Database("connectionStringName")) { return await db.SingleOrDefaultAsync<Product>("SELECT * FROM Products WHERE ProductId=@0", productId); } }
四、PetaPoco 连接池
PetaPoco默认情况下使用连接池技术,这可以减少数据库连接和断开的次数,提高应用程序的性能。我们可以通过配置文件或代码来设置连接池的大小、超时时间等参数。
<connectionStrings> <add name="myConnStr" connectionString="server=127.0.0.1;database=mydb;uid=myuser;pwd=mypass;pooling=true;Max Pool Size=100;" /> </connectionStrings>
五、PetaPoco 多对多
PetaPoco允许我们通过多对多的方式在数据表之间建立关联,这非常实用。下面是一个多对多关系的示例:
[TableName("Users")] [PrimaryKey("UserId")] public class User { public int UserId { get; set; } public string UserName { get; set; } public List<Role> Roles { get; set; } } [TableName("Roles")] [PrimaryKey("RoleId")] public class Role { public int RoleId { get; set; } public string RoleName { get; set; } public List<User> Users { get; set; } } public static void LoadRoles(this Database db, User user) { user.Roles = db.FetchBy<Role, UserRole>( u => u.UserId, new Sql("SELECT * FROM Roles WHERE RoleId IN (SELECT RoleId FROM UserRoles WHERE UserId=@UserId)", new { user.UserId })); }
六、PetaPoco factory
PetaPoco也提供了一些工厂方法,用于创建Database对象。
var db = new Database("connectionStringName"); var db = new Database("server=127.0.0.1;database=mydb;uid=myuser;pwd=mypass;pooling=true;Max Pool Size=100;"); var db = PetaPoco.DatabaseConfiguration.Build().UsingConnectionString("connectionStringName").Create();
七、PetaPoco depper区别
PetaPoco有两个版本:PetaPoco和PetaPoco.Core。其中,PetaPoco.Core是基于.NET Standard的版本,支持.NET Framework、.NET Core和Xamarin等平台。相比之下,PetaPoco的目标框架是.NET Framework,因此其不支持.NET Core等平台。
八、PetaPoco.netcore多线程并发
PetaPoco在.NET Core上支持多线程并发处理,这对于一些高并发场景非常有用。下面是一个多线程获取数据的示例:
public async Task<List<Product>> GetProductsAsync(int categoryId, int page, int pageSize) { using (var db = new Database("connectionStringName")) { string sql = "SELECT * FROM [Products] WHERE [CategoryId]=@0 ORDER BY [ProductId] OFFSET @1 ROWS FETCH NEXT @2 ROWS ONLY"; List<Product> products = new List<Product>(); var options = new ParallelOptions { MaxDegreeOfParallelism = 4 }; //设置4个线程 await Task.Run(() => { Parallel.For(0, 4, options, (i) => { var list = db.Fetch<Product>(sql, categoryId, page + i * (pageSize / 4), pageSize / 4); lock (products) { products.AddRange(list); } }); }); return products; } }
九、PetaPoco oracle
除了支持SQL Server、MySQL等常见数据库外,PetaPoco还支持Oracle数据库。我们只需要修改连接字符串即可连接到Oracle数据库。下面是一个示例:
<connectionStrings> <add name="myConnStr" connectionString="Data Source=//localhost:1521/XE;User Id=myuser;Password=mypass;" providerName="Oracle.ManagedDataAccess.Client" /> </connectionStrings>
十、PetaPoco vs2022
PetaPoco同样支持最新的Visual Studio 2022开发环境。我们可以通过NuGet安装VS2022的适配包。
PM> Install-Package PetaPoco.VS2022
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/310087.html