dotnet core 数据库
dotnet core 數(shù)據(jù)庫
程序開發(fā)過程中,需要使用數(shù)據(jù)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),分析等。通常而言都會(huì)使用ORM來實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫與實(shí)體對(duì)象的轉(zhuǎn)化,過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中。
ORM
ORM是實(shí)現(xiàn)持久化層的一種常用的方式,使得ORM中間件能在任何一個(gè)應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)庫層之間充當(dāng)橋梁。常用的ORM有Dapper,EF,NPOCO等。選擇ORM我一般關(guān)注一下幾點(diǎn):
| 簡單表映射 | Y | Y | Y |
| 侵入性 | N | Y | N |
| LINQ訪問 | N | Y | Y |
| SQL語句 | Y | Y | Y |
| 多數(shù)據(jù)庫 | Y | Y | Y |
| 日志 | Y | N | Y |
| 性能 | 優(yōu) | 一般 | 優(yōu) |
通過一些簡單的比較,個(gè)人比較在意日志,LINQ使用,侵入性等性質(zhì),所以選擇NPOCO作為ORM工具。
安裝
這里使用MySQL數(shù)據(jù)庫存儲(chǔ),首先安裝對(duì)應(yīng)的依賴包,使用NuGet安裝如下包
NPoco 3.5.0
MySql.Data 7.0.7-m61
安裝完成后進(jìn)行相應(yīng)還原,為了方便的使用NPOCO中原有的數(shù)據(jù)操作并進(jìn)行一些擴(kuò)展,使用CachedDataAccess繼承NPOCO中的Database操作類,代碼如下:
配置
在appsettings.json文件中配置連接字符串示例如下:
{"ConnectionStrings": {"DefaultConnection": "server=127.0.0.1;userid=xxx;pwd=xxx;port=3306;database=demo;sslmode=none;Allow Zero Datetime=True;Convert Zero Datetime=True;"} }在CachedDataAccess使用靜態(tài)構(gòu)造獲取對(duì)應(yīng)的連接字符串,并利用默認(rèn)的構(gòu)造函數(shù)初始換對(duì)應(yīng)的連接,這樣就可以使用默認(rèn)構(gòu)造來初始化使用數(shù)據(jù)庫。
public class CachedDataAccess : Database {protected static IConfigurationRoot Configuration { get; }protected static string connection { get; set; }private ILogger _logger = Log.Logger;static CachedDataAccess(){var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);Configuration = builder.Build();connection = Configuration.GetConnectionString("DefaultConnection");}public CachedDataAccess() : base(connection, DatabaseType.MySQL, MySql.Data.MySqlClient.MySqlClientFactory.Instance){} }操作
使用NPOCO的常用的數(shù)據(jù)庫操作及使用
事務(wù)
using (var db = new CachedDataAccess()) {db.BeginTransaction();//Your CRUD operation heredb.CompleteTransaction(); }增加
public class MIKO_ACCOUNT { public int ID { get;set; }public string ACCOUNT { get;set; }; }using (var cda = new CachedDataAccess()) {var item = new MIKO_ACCOUNT();item.ACCOUNT = "demo";cda.BeginTransaction();cda.Insert(item);cda.CompleteTransaction(); }刪除
using (var cda = new CachedDataAccess()) {cda.BeginTransaction();cda.Delete<MIKO_ACCOUNT>(p=>p.ACCOUNT == "demo");cda.CompleteTransaction(); }查詢
using (var cda = new CachedDataAccess()) {cda.BeginTransaction();var items = cda.Query<MIKO_ACCOUNT>().Where(p=>p.ACCOUNT == "demo");cda.CompleteTransaction(); }修改
using (var cda = new CachedDataAccess()) {cda.BeginTransaction();var user = cda.Query<MIKO_ACCOUNT>().Where(p=>p.ACCOUNT == "demo").FirstOrDefault();user.ACCOUNT = "new@domain.com";db.Update(user);cda.CompleteTransaction(); }日志
日志記錄對(duì)跟蹤錯(cuò)誤及統(tǒng)計(jì)有很重要的意義,NPOCO中可以采用手工重寫OnExecutingCommand,OnException方法來實(shí)現(xiàn)日志的記錄。簡單的實(shí)現(xiàn)代碼如下,其中
private ILogger _logger = Log.Logger;protected override void OnExecutingCommand(DbCommand cmd) {this._logger.Information(FormatCommand(cmd)); }protected override void OnException(Exception exception) {this._logger.Error(exception.Message); }我們執(zhí)行一個(gè)上面的查詢語句,在日志中可以看到對(duì)應(yīng)的查詢記錄如下
2017-06-24 19:55:48.589 +08:00 [Information] SELECT `M`.`ID` as `ID`, `M`.`ACCOUNT` as `ACCOUNT`, FROM `MIKO_ACCOUNT` `M` WHERE (`M`.`ACCOUNT` = @0)-> @0 [String] = "demo"轉(zhuǎn)載于:https://www.cnblogs.com/SLchuck/p/7082590.html
總結(jié)
以上是生活随笔為你收集整理的dotnet core 数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: E20170626-gg
- 下一篇: MySQL命令行登陆,远程登陆MySQL