访问传统sql数据库,大家以前都是用sql语句去查询。这些年流行orm方法

ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列

dotnet 官方很早就有orm模型 entiry framework,这里我们就以 mysql/miriadb 为例

说明 entiry framework的使用

代码在这里

https://gitee.com/lightsever/netcore_study/tree/master/server03_orm

第一步、搭建数据库环境

我比较偷懒,直接xampp搭建,这样比较简单。

mysql数据库 注意端口,图上有 3306

启动apache 和 mysql 服务

然后点击mysql行的admin 可以打开phpmyadmin页面直接管理数据库

创建一个用来测试的库,我就叫他testdb

第二步,ORM框架的安装

创建 dotnet core 项目,引入 lib.http 这些略,搭建一个http服务来测试

安装nuget包

Pomelo.EntityFrameworkCore.MySql

nuget包安装方法略

第三步,编写模型代码

定义这样两个对象

Item1就是 ORM的O,一个Item1的实例,就是数据库中的一行,当然ORM框架不止可以针对SQL数据库,准确的说应该是当ORM映射到一个sql数据库时,一个item1的实例就是数据库中的一行

其中id是主键,用[key]attribute标记

MyDbObj是数据对象,他必须继承自DbContext,他里面的items成员,注意表示是一个表,一样,是映射到sql数据库时。

items的成员名就会被映射到表名

还要注意一下重载onConfiguring 并指定sql连接字符串

Server 是mysqlserver的 ip或域名

port 3306 我们之前专门提过

database 就是我们创建的库,testdb

user 是root,xampp创建的sql 超级管理员账户

password,默认密码为空

第四步,初始化数据库

我们定义了一个静态变量dbobj,因为数据库只需要连接一次

EnsureCreateAsync 会检查数据库,我们需要的表是否都建立,如果没有会创建表。

用dbinit触发他

然后刷新phpmyadmin 就能看到一个叫做items的表被创建了出来

第五步,写入数据库

orm的特点就是写入简单

只需要向items里面添加一个实例。然后SaveChangesAsync就好

一样你可以用dbwrite触发后观察

第六步,查询数据库

查询时使用linq方式 查询dbobj的对应dbset成员即可。

比如查询items表,只要用linq的where指令即可

这个不会真的触发查询,你需要用ToArray 或者 foreach 遍历这个list时才查询。

推荐永远使用 Async方法,虽然ToArray()很亲切,但内部的死循环会让httpserver的性能变差。

第七步 潜在的缺陷

因为aspnetcore的http server 是个多线程模型,所以现在那个初始化数据库是线程不安全的

线程安全对大部分不合格的程序员来说,都是一个困难的命题,好在,只要坚持每个业务请求都是上下文无关的,所有的线程安全都可以集中在业务和框架的连接处,也就是只有数据库组件的初始化可能存在线程安全问题。

用dotnet core搭建web服务器(三)ORM访问数据库的更多相关文章

  1. 用dotnet core 搭建web服务器(一)http server

    环境说明 dotnet core,开发需要安装dotnetcore sdk,运行需要安装 dotnetcore runtime 运行目前几乎支持所有常见平台 开发推荐windows10 平台 首先安装 ...

  2. 用dotnet core搭建web服务器(二)路由表与封装

    https://gitee.com/lightsever/netcore_study/tree/master/server02_path 先上代码,首先我们把httpserver封装一下,以后用起来方 ...

  3. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  4. spring cloud+dotnet core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  5. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  6. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...

  7. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  8. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  9. 用tomcat搭建web服务器

    链接地址:http://www.blogjava.net/qingshow/archive/2010/01/17/309846.html qingshow “不积跬步无以至千里,不积小流无以成江海”. ...

随机推荐

  1. 解决老浏览器不支持ES6的方法

    转载地址:http://www.rockyxia.com/?p=669 为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使 ...

  2. 【Web技术】286- 自定义错误及扩展错误

    英文:Ilya Kantor  译文:LeviDing https://zh.javascript.info/custom-errors 当我们在进行开发的时候,通常需要属于我们自己的错误类来反映任务 ...

  3. win10配置git SSH

    1.安装的过程就不说了,直接去官网下载git for windows 安装便可 安装完了,无非就是像用它,就想从github上clone项目下来,仅仅是安装了git还不能直接从远程下载项目下来哦,还需 ...

  4. jq触发oninput事件

    之前一直在用jq的change()方法来处理输入框的值变化事件,以及触发输入框的变化事件. 后来发现change()方法有个弊端,change事件的发生条件是:输入框的值value发生变化,并且输入框 ...

  5. 张亦总结《AG百家乐庄闲,龙虎中下三路技巧和三株路的运用》

    ​​关于三珠路的各种打法,这里我做个详细的讲解 三珠路的打法源于澳门赌王叶汉,需要了解赌王叶汉的著作<BJL投注公式>的可以加我Q:<10353581>进行详细解答 叶汉的打法 ...

  6. OPCode 详解

    OpCode 操作码(Operation Code, OPCode):描述机器语言指令中,指令要执行某种操作的机器码 OPCode在不同的场合中通常具有不同的含义,例如PHP虚拟机(Zend VM). ...

  7. Nginx-HTTP Strict Transport Security(HSTS)

    HTTP Strict Transport Security(HSTS) HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过HTTP ...

  8. 安装Visual Studio Code并汉化

    安装很简单,直接点击安装文件,然后一直点击next就可以了.这款软件是免费的,不需要破解. 下载地址 这里需要使用快捷键[Ctrl+Shift+P],在弹出的搜索框中输入[configure lang ...

  9. Java问题记录——循环里的二次判断与状态更新

    Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环 ...

  10. 面试连环炮系列(六):Dubbo应用为什么要部署Zookeeper

    Dubbo应用为什么要部署Zookeeper? Zookeeper用来注册和发现服务,简单说就是提供端注册接口信息到Zookeeper,调用端在Zookeeper上查找接口对应的服务IP和端口.由于Z ...