您现在的位置是:网站首页> 编程资料编程资料
ASP.NET Core使用EF SQLite对数据库增删改查_实用技巧_
2023-05-24
275人已围观
简介 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 Options):base(Options) { } public DbSet 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叫模型类,不叫实体类。
- 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(DbContextOptionsoptions) : base(options) { }
这个构造函数涉及到依赖注入,这里不再赘述,只需要知道这个构造函数能够配置相关设置。
这里的构造函数内容为空,因为暂时没有什么要配置的。
步骤3
在构造函数下面加上代码,对模型类进行映射。
public DbSetUaa { get; set; } //Dbset 映射成一个表 //Dbset 里面的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 options) : base(options) { } public DbSet 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(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(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(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(options => options.UseSqlite(connecttext)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); } 注:
SQLite 数据库文件,可以不加后缀名,但加上后缀名会便于别人识别这是一个数据库的文件,后缀名不限,可以为 .DB、.SQLite、SQLite3等。
4 生成数据库
点击
工具
-NuGet 包管理器
--程序包管理器控制台

输入
Add-Migration InitialCreate
等待结束后在输入
Update-Database
如图

相关内容
- ASP.NET Core实现多文件上传_实用技巧_
- asp.net core 中优雅的进行响应包装的实现方法_实用技巧_
- .NET 6中使用DateOnly和TimeOnly类型_ASP.NET_
- .Net 6中的PeriodTimer介绍_ASP.NET_
- .NET 6开发之实现缓存过程详解_实用技巧_
- .Net Core使用SignalR实现斗地主游戏_基础应用_
- .NET提取 Thread 中返回值详情_ASP.NET_
- ASP.NET Core实时库SignalR简介及使用_实用技巧_
- 在NET Core 中获取 CPU 使用率_ASP.NET_
- 修改 asp.net core 5 程序的默认端口号_ASP.NET_
