dotnet core 数据库
dotnet core 數據庫
程序開發過程中,需要使用數據對數據進行存儲,分析等。通常而言都會使用ORM來實現關系數據庫與實體對象的轉化,過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。
ORM
ORM是實現持久化層的一種常用的方式,使得ORM中間件能在任何一個應用的業務邏輯層和數據庫層之間充當橋梁。常用的ORM有Dapper,EF,NPOCO等。選擇ORM我一般關注一下幾點:
| 簡單表映射 | Y | Y | Y |
| 侵入性 | N | Y | N |
| LINQ訪問 | N | Y | Y |
| SQL語句 | Y | Y | Y |
| 多數據庫 | Y | Y | Y |
| 日志 | Y | N | Y |
| 性能 | 優 | 一般 | 優 |
通過一些簡單的比較,個人比較在意日志,LINQ使用,侵入性等性質,所以選擇NPOCO作為ORM工具。
安裝
這里使用MySQL數據庫存儲,首先安裝對應的依賴包,使用NuGet安裝如下包
NPoco 3.5.0
MySql.Data 7.0.7-m61
安裝完成后進行相應還原,為了方便的使用NPOCO中原有的數據操作并進行一些擴展,使用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使用靜態構造獲取對應的連接字符串,并利用默認的構造函數初始換對應的連接,這樣就可以使用默認構造來初始化使用數據庫。
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的常用的數據庫操作及使用
事務
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(); }日志
日志記錄對跟蹤錯誤及統計有很重要的意義,NPOCO中可以采用手工重寫OnExecutingCommand,OnException方法來實現日志的記錄。簡單的實現代碼如下,其中
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); }我們執行一個上面的查詢語句,在日志中可以看到對應的查詢記錄如下
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"轉載于:https://www.cnblogs.com/SLchuck/p/7082590.html
總結
以上是生活随笔為你收集整理的dotnet core 数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: E20170626-gg
- 下一篇: MySQL命令行登陆,远程登陆MySQL