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 数据库进行管理.
下载地址 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 = "手机号格式不正确")] 这是正则表达式验证, 填写的内容不符合格式的话, 会出现错误提示.
[完]
来源: https://www.cnblogs.com/whuanle/p/10144101.html