ASP.NET Core 使用 SQLite 教程,EF SQLite教程,修改模型更新数据库,适合初学者看懂详细、简单教程
SQLIte 操作方便,简单小巧,这里笔者就不再过多介绍,感兴趣可以到以下博文
https://blog.csdn.net/qq_31930499/article/details/80420246
文章介绍创建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。
如果你的 .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<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 数据库进行管理。
下载地址 http://xzc.197746.com/SQLiteExpert5.zip
软件介绍 https://www.cr173.com/soft/36343.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 = "手机号格式不正确")] 这是正则表达式验证,填写的内容不符合格式的话,会出现错误提示。
【完】
ASP.NET Core 使用 SQLite 教程,EF SQLite教程,修改模型更新数据库,适合初学者看懂详细、简单教程的更多相关文章
- Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel
Asp.Net Core 导入Excel数据到Sqlite数据库并重新导出到Excel 在博文"在Asp.Net Core 使用 Sqlite 数据库"中创建了ASP.NET Co ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- ASP.NET Core 开发 - Entity Framework (EF) Core
EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- 在Asp.Net Core 5 中使用EF Core连接MariaDB
升级到Asp.Net Core 5,使用EF Core连接MariaDB,使用的Nuget包Pomelo.EntityFrameworkCore.MySql也升级到了5.0.0-alpha.2,然后发 ...
- ASP.NET CORE RAZOR :向 Razor 页面应用添加模型
本文来自:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/model 在本部分中将添加用于管理数据库中的电影的类. ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- [ASP.NET Core 3框架揭秘] 配置[3]:配置模型总体设计
在<读取配置数据>([上篇],[下篇])上面一节中,我们通过实例的方式演示了几种典型的配置读取方式,接下来我们从设计的维度来重写认识配置模型.配置的编程模型涉及到三个核心对象,分别通过三个 ...
- ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...
随机推荐
- JavaScript设计模式-3.原型模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- java 位运算符,逻辑运算符
逻辑运算符;布尔值时使用 a=true;b=false &: 逻辑或 例:a & b=false; |: 逻辑与 例:a | b=true; !:逻辑非 例:!a=fal ...
- 吴恩达《深度学习》第二门课(3)超参数调试、Batch正则化和程序框架
3.1调试处理 (1)不同超参数调试的优先级是不一样的,如下图中的一些超参数,首先最重要的应该是学习率α(红色圈出),然后是Momentum算法的β.隐藏层单元数.mini-batch size(黄色 ...
- [java] byte不能直接相加
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型. // Error: conversion from int to byte:byte z = ...
- Idea软件Vim插件问题
人家说用webstorm是纯前端,用Idea是java+前端,好,那就用Idea,装上试试,全选所有插件安装,奇迹出现了,选中一行代码,backspace,删不了,我的天,好吧,复制粘贴的快捷键也不行 ...
- 事件绑定的快捷方式 利on进行事件绑定的几种情况
[事件绑定快捷方式]$("button:first").click(function(){ alert(1); }); [使用on绑定事件] ① 使用on进行单事件绑定 $(&qu ...
- JQuery语法 JQuery对象与原生对象互转 文档就绪函数与window.onload的区别
[JQuery语法] 1.jQuery("选择器").action();通过选择器调用事件函数,但是jquery中,jquery可以用$(“选择器”).action(); ① ...
- SQL Serever学习4
SQL Server系统中数据库相关概念 在SQLServer数据库系统中分为2大类,系统数据库和用户数据库. SQLServer安装后系统会自动生成4个系统数据库,他们是Master,Model,M ...
- jquery选择器【总结】
本文总结整理了jquery里和选择器相关的所有方法,通过这篇文章,可以让你学习到在jquery里使用选择器的所有方法. 一:基本选择器: $("#aijquery") 选择id值等 ...
- HTML5--(3)过渡+动画+颜色+文本
一.过渡transition transition-property指定属性名称 (如width.height.background-color.内外边距) all 所有属性都将获得过渡效果(默认) ...