dotnet core 数据库
dotnet core 数据库
程序开发过程中,需要使用数据对数据进行存储,分析等。通常而言都会使用ORM来实现关系数据库与实体对象的转化,过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM
ORM是实现持久化层的一种常用的方式,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。常用的ORM有Dapper,EF,NPOCO等。选择ORM我一般关注一下几点:
| Dapper | EF | NPOCO | |
|---|---|---|---|
| 简单表映射 | 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操作类,代码如下:
public class CachedDataAccess : 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 here
db.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"
dotnet core 数据库的更多相关文章
- 用dotnet core搭建web服务器(三)ORM访问数据库
访问传统sql数据库,大家以前都是用sql语句去查询.这些年流行orm方法 ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列 dotnet 官方很早 ...
- dotnet core 使用 MongoDB 进行高性能Nosql数据库操作
好久没有写过Blog, 每天看着开源的Java社区流口水, 心里满不是滋味. 终于等到了今年六月份 dotnet core 的正式发布, 看着dotnet 社区也一步一步走向繁荣, 一片蒸蒸日上的大好 ...
- DotNet Core 介绍
前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...
- 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)
作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...
- [翻译 EF Core in Action 2.3] 理解EF Core数据库查询
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
- 【Step By Step】将Dotnet Core部署到Docker下
一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core—使用.Net Core + Entity FrameWor ...
- DotNet和DotNet Core
EF 1.0 ---EF6.0 都是code firstmodel ,model model first model,database first model, EF7 是DOTNET CORE重框版 ...
- 国产中标麒麟Linux部署dotnet core 环境并运行项目 (二) 部署运行控制台项目
背景 在上一篇文章安装dotnet core,已经安装好dotnet core了.之前只是安装成功了dotnet, 输入dotnet --info,可以确认安装成功了,但是在运行代码时,还是报错了,本 ...
- devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务
使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...
随机推荐
- mysql 5.7版本如何修改密码
这是官方截图,mysql5.7安装后,会有一个默认密码,保存在mysql.log里面,找的他,并更改 官方文档地址 https://dev.mysql.com/doc/refman/5.7/en/li ...
- LAB2 软件测试 Selenium上机实验 2017
1.安装SeleniumIDE插件 打开Firefox——>菜单栏——>附加组件——>获取附加组件——>查看更多附加组件——>搜索框输入SeleniumIDE并查找——& ...
- SAP成都研究院廖婧:SAP C4C社交媒体集成概述
曾经有朋友在知乎上向我提问,咨询在SAP成都研究院工作的体验. 当时,我的回答提到一点,SAP注重工作与生活的平衡,这也是SAP中国官网强调的一点. https://www.sap.com/china ...
- Android(java)学习笔记20:UDP协议发送数据
1. UDP协议发送数据:我们总是先运行接收端,再运行发送端发送端: package cn.itcast_02; import java.io.IOException; import java.net ...
- Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决
问题背景: 參考链接 做了一个图片浏览,用ContentResolver扫描图库照片.且严格依照时间拍摄顺序排好序显示在listview里.例如以下图所看到的: watermark/2/text/aH ...
- Gym - 101334E 多叉树遍历
题意:给定一个字符串,求有多少种树与之对应,对应方式是,每次遍历左节点,没有了,就回溯: 分析:d[i,j] = sum(d[i+1,k-1],d[k,j]) (str[i]==str[k]); 坑点 ...
- Manacher算法模板
题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格 ...
- ES6学习笔记(对象)
1.属性的简洁表示法 const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {f ...
- JavaScript js调用堆栈(一)
本文主要介绍JavaScript程序内部的执行机制 首先先了解什么是执行上下文 执行上下文就是当前JavaScript代码被解析和执行是所在环境的抽象概念,JavaScript中运行任何的代码都是在执 ...
- rest_framework -- mixins&generics
上面的mixins.generics都是rest_framework里的模块,我们可以继承其中的某些类,达到代码量减少的效果,这里充分体现出了面向对象的继承 一.mixins模块 mixins : f ...