zoukankan      html  css  js  c++  java
  • 用dotnet core搭建web服务器(三)ORM访问数据库

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

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


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

    说明 entiry framework的使用


    代码在这里

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


    第一步、搭建数据库环境

    image

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

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

    启动apache 和 mysql 服务

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

    image

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

    第二步,ORM框架的安装

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

    安装nuget包

    Pomelo.EntityFrameworkCore.MySql


    nuget包安装方法略


    第三步,编写模型代码

    image

    定义这样两个对象

    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,默认密码为空

    第四步,初始化数据库

    image

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

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

    image

    用dbinit触发他

    image

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

    第五步,写入数据库

    image

    orm的特点就是写入简单

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

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

    第六步,查询数据库

    image


    image

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

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

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

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

    第七步 潜在的缺陷

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


    image

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

  • 相关阅读:
    Python 对象的绑定方法
    Python 类的属性
    Python 对象与类
    Python 面向对象
    Python Subprocess模块
    Python Hashlib模块
    Python Configparser模块
    Python XML模块
    Python Re模块
    Gridview中Datakeys 通过主键取得各列的值。(转)
  • 原文地址:https://www.cnblogs.com/crazylights/p/11888735.html
Copyright © 2011-2022 走看看