ASP.NET Core使用EF SQLite对数据库增删改查

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

https://www.jb51.net/article/234142.htm

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

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

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。

如果你的 .Net Core 是最新的,那么 NuGet 也选最新的即可。

如果你选择版本后,发现报错,可以再进入 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(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 数据库进行管理。

下载地址https://www.jb51.net/database/265.html

软件介绍https://www.jb51.net/database/265.html

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

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

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 = "手机号格式不正确")] 这是正则表达式验证,填写的内容不符合格式的话,会出现错误提示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • ASP.net与SQLite数据库通过js和ashx交互(连接和操作)

    ASP.net与SQLite数据库通过js和ashx交互(连接和操作): 废话(也是思路):用的是VS2010,打算做网站前后台.由于不喜欢前台语言里加些与html和css和js的其他内容,想实现前后台语言的分离,与前后台通过js的ajax实现交互,故很多百度出来的方法不成立,虽听说ashx过时,但是他实现了我要的效果:即前后台语言不是相互嵌入实现交互,而是通过js实现(有接口就可以). 由于领导指定用SQLite,故这两天还折腾了SQLite,不过对于这种小型的网站,它是个很好的选择(不需要部

  • Asp.net中使用Sqlite数据库的方法

    实际运用中当我用SqliteAdmin以及SQLite Expert Professional 2软件新建Sqlite数据库的时候在ASP.NET中是无法运用的,老是报错:文件不是一个合法的数据库.后来采用一种方法,就是直接在ASP.NET里面利用引用入的DLL新建数据库就可以用了. string datasource = "d:\\test.db"; //数据库文件的地址 System.Data.SQLite.SQLiteConnection.CreateFile(datasourc

  • ASP.NET(C#)中操作SQLite数据库实例

    要想在ASP.NET项目中使用SQLite数据库,先需下载一个ADO.NET 2.0 SQLite Data Provider,下载地址为:http://sourceforge.net/project/showfiles.php?group_id=132486&package_id=145568,下载后安装完毕后,该安装程序自动在在系统注册(即可在"添加引用"中看到所安装的Provider).     然后,在项目中添加上图所选项即可. aspx页面仅包含一按钮btnTest,

  • asp.net下SQLite(轻量级最佳数据库) 原理分析和开发应用

    概述 SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分.正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性.随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据库管理系统更适应.嵌入式数据库直接在应用程序进程中运行,提供了零配置(zero-configuration)运行模式,并且资源占用非常少. SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它

  • ASP.NET Core使用EF SQLite对数据库增删改查

    SQLIte 操作方便,简单小巧,这里笔者就不再过多介绍,感兴趣可以到以下博文 https://www.jb51.net/article/234142.htm 文章介绍创建ASP.NET Core 程序,创建模型.上下文,生成数据库,对数据库增删查改. 并对每个过程进行详细介绍,使初学者尽快了解内容和相关知识,避免对某一知识点怀疑.卡在某个位置. 1 新建ASP.NET Core MVC 应用 1.1 新建MVC应用 打开Visual Studio 2017,新建 ASP.NET Web应用程序

  • Spring MVC实现mysql数据库增删改查完整实例

    最近刚学了springmvc框架,感觉确实方便了不少,减少了大量的冗余代码.就自己做了个小项目练练手,这是个初级的springmvc应用的项目,没有用到mybatis,项目功能还算完善,实现了基本的增删改查的功能. 项目环境: -系统:win10 -开发环境:eclipseOxygenReleaseCandidate3(4.7) -jdk版本:java1.8(121) -mysql:5.7 -spring:4.0 -tomcat:8.5 用到的技术: springmvcspringjspjdbc

  • 搭建MyBatis-Plus框架并进行数据库增删改查功能

    搭建MyBatis-Plus框架并进行数据库添加 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 1.搭建环境 Jdk:jdk1.8.0_261 Idea:IntelliJ IDEA Maven:apache-maven-3.3.6 MySQL:mysql-5.5.61 2.项目搭建 3.配置maven 4.项目结构 创建数据库 CREATE DATABASE tzy03; USE tzy03;

  • Python Sql数据库增删改查操作简单封装

    本文实例为大家分享了如何利用Python对数据库的增删改查进行简单的封装,供大家参考,具体内容如下 1.insert import mysql.connector import os import codecs #设置数据库用户名和密码 user='root';#用户名 pwd='root';#密码 host='localhost';#ip地址 db='mysql';#所要操作数据库名字 charset='UTF-8' cnx = mysql.connector.connect(user=use

  • thinkPHP数据库增删改查操作方法实例详解

    本文实例讲述了thinkPHP数据库增删改查操作方法.分享给大家供大家参考,具体如下: thinkphp对数据库增删改查进行了封装操作,使得使用更加方便,但是不一定灵活. 可以用封装的用,需要写sql,可以执行sql. 1.原始的 $Model = new Model(); // 实例化一个model对象 没有对应任何数据表 $insert_sql = "INSERT INTO sh_wxuser_collection (user_id,store_id,good_id,addtime) VAL

  • thinkphp3.2.3版本的数据库增删改查实现代码

    框架thinkphp 版本:3.2.3 内容:数据库操作 1. 多表查找一条数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->find(); 2.查找一条数据 M('a表')->where('条件')->find(); 3.多表查询所有数据 M('a表')->join("b表 on b表.id=a表.id")->where('条件')->select(); 4.查询

  • Java连接MySQL数据库增删改查的通用方法(推荐)

    运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了 数据库--MySQL-->Java篇 接下来我给大家讲讲如何将这个不可复用,又多重复的连接代码,封装起来,非常

  • IntelliJ Idea SpringBoot 数据库增删改查实例详解

    SpringBoot 是 SpringMVC 的升级,对于编码.配置.部署和监控,更加简单 微服务 微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务.一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议. Spring 为 微服务提供了一整套的组件-SpringClound , SpirngBoot 就是该基础. 第一个SpringBoot程序 这里使用的开发软件是IntelliJ Idea,和Eclipse

  • CI框架(CodeIgniter)实现的数据库增删改查操作总结

    本文实例讲述了CI框架(CodeIgniter)实现的数据库增删改查操作.分享给大家供大家参考,具体如下: controllers下的 cquery.php文件 <?php class CQuery extends Controller { //构造函数 function CQuery() { parent::Controller(); // $this->load->database(); } function index() { //调用model 其中train为外层文件夹 MQu

  • Java基础开发之JDBC操作数据库增删改查,分页查询实例详解

    对数据库的操作无非就是增删改查,其中数查询操作最为复杂,所以将查询单独讲解,我这里用的Mysql数据库 增删改查操作 分页查询操作 1.查询结果以list返回 2.查询结果以jsonArray返回 3.查询总记录条数 先看一下相关的配置信息 public static final String USER_NAME = "root"; public static final String PWD = "123456789"; public static final S

随机推荐