当前位置: 移动技术网 > IT编程>开发语言>.net > ASP.NET Core 使用 SQLite 教程,EF SQLite教程,修改模型更新数据库,适合初学者看懂详细、简单教程

ASP.NET Core 使用 SQLite 教程,EF SQLite教程,修改模型更新数据库,适合初学者看懂详细、简单教程

2018年12月20日  | 移动技术网IT编程  | 我要评论

高铁八分半,优酷 土豆 合并,魔武圣天使

sqlite 操作方便,简单小巧,这里笔者就不再过多介绍,感兴趣可以到以下博文

 文章介绍创建asp.net core 程序,创建模型、上下文,生成数据库,对数据库增删查改。

并对每个过程进行详细介绍,使初学者尽快了解内容和相关知识,避免对某一知识点怀疑、卡在某个位置。


 过程&目录

1 新建asp.net core mvc 应用

  1.1 新建mvc应用

   1.2 引入nuget 包

 2 新建模型和上下文

  2.1 新建模型类

  2.2 新建上下文

3 配置服务

4 生成数据库

5 使用工具管理sqlite文件

6 生成增删查改基架

7 数据验证


 

1 新建asp.net core mvc 应用

  1.1 新建mvc应用

打开visual studio 2017,新建 asp.net web应用程序,选择 mvc(模型视图控制器)。

 

 1.2 引入nuget 包

   需要 引入 

  • microsoft.entityframeworkcore
  • microsoft.entityframeworkcore.sqlite

 引入教程

点击

依赖项

    -右键

       --管理nuget 程序包

 

轮流输入并安装 microsoft.entityframeworkcore  、 microsoft.entityframeworkcore.sqlite,下面附过程

注:

版本请选择与自己 asp.net core 版本接近的。

笔者版本 asp.net core 版本为 2.1 ,选择的 nuget 包版本为 2.11。

如果你选择版本后,发现报错,可以再进入 nuget  重新删除安装。

出现更新提示千万不用更新。


 

 2 新建模型和上下文

这一步建立模型和上下文,后面将会根据这里的代码生成数据库和数据库表!

需要建立一个上下文类和模型类,把模型类包含在上下文类中,上下文类中包含进来的模型类,将会生成对应的数据库表。

下面这代码不用自己操作,只需要看就行。(注意红色加粗部分)

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.entityframeworkcore;
namespace webapplication1.models
{
    public class sqlcontext:dbcontext
    {
        public sqlcontext(dbcontextoptions<sqlcontext> options):base(options)
        {
        }
        public dbset<a> a { get; set; } //在数据库中生成数据表a

    }

    public class a
    {
        public int id { get; set; }
       } public class b { public int id { get; set; } } }

上面代码,有三个类,

  • 其中  sqlcontext 类是上下文类,
  • a、b类为模型类,
  • 但是,只让a生成数据库表,而b不会生成数据库表。
  • a、b都是模型类,因为可以被生成数据库表,所以a也可以叫实体类,b因为没有 dbset<b> ,所以b叫模型类,不叫实体类。
  • a类将会生成一个真实的数据库中的表,有对应关系,所以,他是“实体类”。
  • b类没有对应的存在,只是模型,没有实际存在的对象,所以只是叫“模型类”。

 

2.1 新建模型类

上面代码把模型类、上下文类放到同一个文件 sqlcontext.cs,这样可读性不太好。

因为一个模型类,代表一个数据表,上下文类相当于一个配置类,一个数据库有几十个表,每个表有几个列,这样会使文件内容过于复杂。

我们可以降低耦合,每个类文件只存在一个类,每个类代表一个表,你要创建几个表,就对应写几个类。

实际操作

在 models 文件夹中

  • 新建一个类  users.cs
  • 在类中直接写代码
        public int id { get; set; }       //主键
        public string name { get; set; }  //用户名称
        public int age { get; set; }    //用户年龄
        public int number { get; set; } //用户手机号码

如图

注:

一个模型类  对应 一个数据表(table)

模型类的一个属性  对应一个列。

模型类只应出现属性,不应该出现方法等。

 笔者这里只写一个表,如果你想要多个表,可以新建其它类,然后在上下文类中加入。

 

2.2 新建上下文

上面已经建立模型类,模型类将成为数据表(table)本身。然而他们不能直接对应生成数据表,需要上下文来对模型类映射成数据表,不然他们只是普通的类。

models 目录新建 类 mycontext.cs

 

在头部引入 ef( entityframeworkcore )

using microsoft.entityframeworkcore;

 

重写 mycontext

步骤1 

  public class mycontext

改成

    public class mycontext:dbcontext    //表示该类为上下文类,数据库名称为 my,类名称为什么,数据库名就为什么

 

步骤2

在mycontext类中写一个构造函数

        public mycontext(dbcontextoptions<mycontext> options) : base(options)
        {

        }

这个构造函数涉及到依赖注入,这里不再赘述,只需要知道这个构造函数能够配置相关设置。

这里的构造函数内容为空,因为暂时没有什么要配置的。

 

步骤3

在构造函数下面加上代码,对模型类进行映射。

        public dbset<users> uaa { get; set; }
//dbset  映射成一个表
//dbset<users>   里面的users即为使用的模型类
//uaa      users 类在数据库生成的名称

注:

上面代码表示以模型类users为基础,在数据库中生成 名为 uaa 的 表。

一个上下文对应 一个 数据库,上下文类 mycontext,context 前面的部分将成为数据库名称。例如 asdwadaacontext,将生成数据库asdwadaa。

一个模型类  对应 一个数据表(table)

完整代码如下

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.entityframeworkcore;

namespace webapplication1.models
{
    public class mycontext:dbcontext
    {
        public mycontext(dbcontextoptions<mycontext> options) : base(options)
        {

        }
        public dbset<users> uaa { get; set; }
    }
}

 

生成的效果图预览

 


 

3 配置服务

为了让应用生成数据库、使用到这个数据库,需要在 startup.cs 增加代码

在头部引入三个 库

using webapplication1.models;  //可能命名不同
using microsoft.entityframeworkcore;
using microsoft.entityframeworkcore.sqlite;

然后为 应用注入服务,有以下方式

(后面再解释作用,现在先了解,不用加)

1 直接写字符串

在 startup.cs 增加代码

            string connecttext = "filename=f:\\my.db";
            services.adddbcontext<mycontext>(options=>options.usesqlite(connecttext));

2 使用json

在 appsettings.json 文件加入内容(红色部分)

{
  "logging": {
    "loglevel": {
      "default": "warning"
    }
  },
  "allowedhosts": "*",
  "connectionstrings": {
    "mycontext": "filename=f:\\my.db"
  }
}

然后 在 startup.cs 增加代码

            string connecttext = configuration.getconnectionstring("mycontext");
            services.adddbcontext<mycontext>(options=>options.usesqlite(connecttext));

 

 注:

以上两种方式,connecttext 变量的作用是获取数据库连接字符串,此变量没有特殊意义,只是为了增加可读性。

sqlite的连接字符串,只需要写  "filename=[绝对路径]"

services.adddbcontext<mycontext>(options=>options.usesqlite(“连接字符串”));
表示
    向应用注入dbcontext (数据库上下文服务),注入的上下文类型为
mycontext>

(options=>options.usesqlite(“连接字符串”)
是 lambda 表达式,表示使用 sqlite 数据库,参数是连接字符串。lambda 表达式属于c# 基础知识,不会的话,先记着,以后查找资料。

来实际操作

请使用复制上面 方式一 的代码,然后在 startup.cs 类 -- configureservices 方法里加入

 

直接复制下面代码覆盖 configureserverices

        public void configureservices(iservicecollection services)
        {
            services.configure<cookiepolicyoptions>(options =>
            {
                // this lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.checkconsentneeded = context => true;
                options.minimumsamesitepolicy = samesitemode.none;
            });

            string connecttext = "filename=f:\\my.db";
            services.adddbcontext<mycontext>(options => options.usesqlite(connecttext));

            services.addmvc().setcompatibilityversion(compatibilityversion.version_2_1);
        }

 

注:

sqlite 数据库文件,可以不加后缀名,但加上后缀名会便于别人识别这是一个数据库的文件,后缀名不限,可以为 .db、.sqlite、sqlite3等。

 


 4 生成数据库

点击

  工具

    -nuget 包管理器

      --程序包管理器控制台

 

输入

add-migration initialcreate

等待结束后在输入

update-database

如图

 

然后你会发现解决方案管理器,多了 migrations 目录和一些文件,f:\ 目录也多了一个my.db文件


5 使用工具管理sqlite文件

生成数据库文件后,会发现无法直接打开的,即使是 vs2017 也不行。

这时可以使用工具 sqlite expert professional ,来对 sqlite 数据库进行管理。

下载地址 

软件介绍 

安装好软件后,即可打开数据库文件。

软件打开数据库文件教程:

 

 


 

6 生成增删查改基架

这时候可以在程序对数据库进行操作,对于如何使用,最好去看微软的entity framework文档。

笔者这里给出一个简单的示例。

步骤 1

在 controller 目录,右键点击 添加 -- 新建基架的项目

 

 步骤 2

点击 视图使用 entity framework 的 mvc 控制器

 

模型类 选择 users([项目名称].models)

数据库上下文选择  mycontext ([项目名称].models)

点击 添加

 

 

步骤3 

这时可以看到

controller 多了 userscontroller.cs 文件

views 多了 users 目录

请点击 运行 或按 f5,启动网站

 在网站后面加上 users

例如 https://localhost:[实际端口]/users,就可以对users表为所欲为了

 

步骤4  添加数据

点击 create new

 

 

 结果

 

 

 

 


 

7 填写数据不能为空

注:这里涉及到特性、数据验证,笔者不再赘述,读者可以先了解,然后翻译别的文章。

 

经过上面操作,我们已经可以对数据库进行操作,实际上,虽然可以操作数据,可是如果我想设置某个项必须填写呢,某个项的格式必须是手机呢?总不能让用户随便填吧?

打开 users.cs

添加引用 

using system.componentmodel.dataannotations;

修改users类的代码如下

    public class users
    {
        public int id { get; set; }       //主键

        [required]
        public string name { get; set; }  /n/用户名称

        [required(errormessage ="不能为空")]
        public int age { get; set; }    //用户年龄

        [required]
        [regularexpression(@"^1[3458][0-9]{9}$", errormessage = "手机号格式不正确")]
        public int number { get; set; } //用户手机号码
    }

 

运行网站,打开 url/users,点击 create new,然后不用填写内容直接提交,会发现

 

填写其它项,然后在 number一项乱填数字,会发现

这个就是模型验证。

它不需要写什么代码,只要在属性上面加上 [特性]即可。

这方面知识,请另外查阅。

注:

  • [required] 表示该项不能为空
  • [required(errormessage ="不能为空")] errormessage ="" 就是不按此要求填写,会出现额提示
  • [regularexpression(@"^1[3458][0-9]{9}$", errormessage = "手机号格式不正确")] 这是正则表达式验证,填写的内容不符合格式的话,会出现错误提示。

   

 

【完】

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网