一、引入PetaPoco.NetCore,PetaPoco.NetCore 是基於PetaPoco的輕量ORM,支持.netframework和.netcore,支持單個實體對象映射,也支持多實體對象映射,NetCore未需指定驅動連接,其它API一致。
github地址:https://github.com/qingask/PetaPoco.NetCore
nugut地址:https://www.nuget.org/packages/PetaPoco.NetCore
通過nuget安裝 PM>Install-Package PetaPoco.NetCore
二、.netcore配置
在project.json增加相應.netcore版本的數據庫驅動引用,這里mysql的驅動使用Pomelo.Data.MySql,mysql官方的netcore版本驅動兼容性太差,坑太多,等完善后可替換為官方的myssql core驅動
"dependencies": {
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc2-final",
"Microsoft.NETCore.App": {
"version": "1.0.0-rc2-3002702",
"type": "platform"
},
"Pomelo.Data.MySql": "1.0.0",
"System.Text.Encoding.CodePages": "4.0.1"
}
三、使用PetaPoco.NetCore
1.測試sql
測試sql CREATE TABLE blogs ( BlogId int(11) NOT NULL PRIMARY KEY, Url varchar(1000) DEFAULT NULL ); create table post( id int, title varchar(32), author int ); drop table author; create table author( id int, name varchar(32) ); INSERT into blogs values(1,'test1'); INSERT into blogs values(2,'test2'); INSERT into author value(1,'作者1'); INSERT into author value(2,'作者2'); INSERT into post values(1,'book1',1); INSERT into post values(2,'book2',1); INSERT into post values(3,'book3',2); INSERT into post values(4,'book4',2);
2.使用PetaPoco.NetCore
MySqlConnection connection = new MySqlConnection(""server=localhost;database=test;uid=root;password=123456;charset=utf8;SslMode=None""); var db = new Database(connection); //實體測試 Blog blog = new Blog() { BlogId = 3, Url = "test3" }; //保存 var result = db.Insert(blog); //編輯 blog.Url = "test333"; result = db.Update(blog); //刪除 result = db.Delete(blog); //sql測試 var sql1 = Sql.Builder.Append("insert into blogs values(4,'test4')"); result = db.Execute(sql1); var sql2 = Sql.Builder.Append("update blogs set Url='test444' where BlogId=4"); result = db.Execute(sql2); //查詢 var model2 = db.SingleOrDefault<Blog>(1); //列表 var list = db.Query<Blog>(Sql.Builder.Append("select * from blogs")).ToList(); //分頁 var list2 = db.Page<Blog>(1, 2, Sql.Builder.Append("select * from blogs")); //查詢 var sql3 = Sql.Builder.Append("select * from blogs where BlogId=4"); var model1 = db.Query<Blog>(sql3).FirstOrDefault(); var model3 = db.FirstOrDefault<Blog>(sql3); //返回多個結果測試 result = db.Fetch<post, author, post>( (p, a) => { p.author_obj = a; return p; }, @"SELECT * FROM post LEFT JOIN author ON post.author = author.id ORDER BY post.id"); using (var multi = db.QueryMultiple("select * from post")) { result = multi.Read<post>().ToList(); } using (var multi = db.QueryMultiple(@"SELECT * FROM post LEFT JOIN author ON post.author = author.id ORDER BY post.id")) { result = multi.Read<post, author, post>((p, a) => { p.author_obj = a; return p; }).ToList(); } using (var multi = db.QueryMultiple("select * from post;select * from author;")) { var p = multi.Read<post>().First(); var a = multi.Read<author>().First(); }