SQLIte 操做方便,简单小巧,这里笔者就再也不过多介绍,感兴趣能够到如下博文html
http://www.javashuo.com/article/p-kdnsunjs-k.html正则表达式
文章介绍建立ASP.NET Core 程序,建立模型、上下文,生成数据库,对数据库增删查改。sql
并对每一个过程进行详细介绍,使初学者尽快了解内容和相关知识,避免对某一知识点怀疑、卡在某个位置。数据库
打开Visual Studio 2017,新建 ASP.NET Web应用程序,选择 MVC(模型视图控制器)。json
须要 引入 cookie
引入教程app
点击函数
依赖项工具
-右键网站
--管理NuGet 程序包
轮流输入并安装 microsoft.EntityFrameworkCore 、 Microsoft.EntityFrameworkCore.Sqlite,下面附过程
注:
版本请选择与本身 ASP.NET Core 版本接近的。
笔者版本 ASP.NET Core 版本为 2.1 ,选择的 NuGet 包版本为 2.11。
若是你的 .Net Core 是最新的,那么 NuGet 也选最新的便可。
若是你选择版本后,发现报错,能够再进入 NuGet 从新删除安装。
出现更新提示千万不用更新。
这一步创建模型和上下文,后面将会根据这里的代码生成数据库和数据库表!
须要创建一个上下文类和模型类,把模型类包含在上下文类中,上下文类中包含进来的模型类,将会生成对应的数据库表。
下面这代码不用本身操做,只须要看就行。(注意红色加粗部分)
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.cs,这样可读性不太好。
由于一个模型类,表明一个数据表,上下文类至关于一个配置类,一个数据库有几十个表,每一个表有几个列,这样会使文件内容过于复杂。
咱们能够下降耦合,每一个类文件只存在一个类,每一个类表明一个表,你要建立几个表,就对应写几个类。
实际操做
在 Models 文件夹中
public int ID { get; set; } //主键 public string Name { get; set; } //用户名称 public int Age { get; set; } //用户年龄 public int Number { get; set; } //用户手机号码
如图
注:
一个模型类 对应 一个数据表(Table)
模型类的一个属性 对应一个列。
模型类只应出现属性,不该该出现方法等。
笔者这里只写一个表,若是你想要多个表,能够新建其它类,而后在上下文类中加入。
上面已经创建模型类,模型类将成为数据表(Table)自己。然而他们不能直接对应生成数据表,须要上下文来对模型类映射成数据表,否则他们只是普通的类。
在 Models 目录新建 类 MyContext.cs
在头部引入 EF( EntityFrameworkCore )
using Microsoft.EntityFrameworkCore;
步骤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; } } }
生成的效果图预览
为了让应用生成数据库、使用到这个数据库,须要在 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等。
点击
工具
-NuGet 包管理器
--程序包管理器控制台
输入
Add-Migration InitialCreate
等待结束后在输入
Update-Database
如图
而后你会发现解决方案管理器,多了 Migrations 目录和一些文件,F:\ 目录也多了一个MY.DB文件
生成数据库文件后,会发现没法直接打开的,即便是 VS2017 也不行。
这时可使用工具 SQLite Expert Professional ,来对 SQLIte 数据库进行管理。
下载地址 http://xzc.197746.com/SQLiteExpert5.zip
软件介绍 https://www.cr173.com/soft/36343.html
安装好软件后,便可打开数据库文件。
软件打开数据库文件教程:
这时候能够在程序对数据库进行操做,对于如何使用,最好去看微软的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
结果
注:这里涉及到特性、数据验证,笔者再也不赘述,读者能够先了解,而后翻译别的文章。
通过上面操做,咱们已经能够对数据库进行操做,实际上,虽然能够操做数据,但是若是我想设置某个项必须填写呢,某个项的格式必须是手机呢?总不能让用户随便填吧?
打开 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一项乱填数字,会发现
这个就是模型验证。
它不须要写什么代码,只要在属性上面加上 [特性]便可。
这方面知识,请另外查阅。
注:
【完】