irpas技术客

C#mvc连接 Sqlite数据库_空气里藏着什么_晓飞

网络投稿 8415

1选择Sqlite数据库的原因

首先在vs2019中自带SQLServer数据库,数据库创建的位置默认在 “C:\Users\”目录下,如果修改位置将会无法连接到数据库(当然应该也有办法),为了将数据库放置在与工程同文件夹内并且便于打包,同时考虑到Sqlite数据库方便建立和使用的优点,因此选择Sqlite数据库。本文主要讲解如何建立Sqlite数据库,连接以及“播种”(向数据库添加初始数据)的流程(注:以下流程同样适用于连接vs自带的SQL Server)

2建立mvc项目并建立实体类 2.1建立student类包含需要存入数据库的属性

建立一个简单的student实体作为示例,包含了学生的基本信息(年龄,姓名,班级,邮箱)

public class student { public int Id { get; set; } public int Age { get; set; } public string Name { get; set; } public string ClassName { get; set; } public string Email { get; set; } } 2.2建立上下文连接(Dbcontext类)

首先,新建一个类,继承(Dbcontext),可能会出现如下情况,就选择 安装包“Microsoft.EntityFrameworkCore” 安装依赖项,安装5.0.12版本即可,最新版本和3.1不兼容。,安装好后,添加引用 “using Microsoft.EntityFrameworkCore”。

?然后将实体传入Dbset,同时重写OnModelCreating()函数,设置以下两条数据作为初始数据

public class AppDbcontext : DbContext { //注册将要写入数据库的实体 public DbSet<student> students { get; set; } //构造函数 public AppDbcontext() { } public AppDbcontext(DbContextOptions<AppDbcontext> options):base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<student>().HasData( new student { Id = 1, Name = "晓飞", Age = 22, ClassName = "一年级", Email = "5@163.com", }, new student { Id = 2, Name = "空气里藏在什么", Age = 42, ClassName = "二年级", Email = "xiaofei@126.com", }); } } 2.3设置startup.cs文件

1.首先安装1个包 EntityFrameworkCore.Sqlite,同时添加引用“using Microsoft.EntityFrameworkCore;”

2.建立configuration,便于以后更改设置同时便于添加连接字符串,同样需要添加引用“using Microsoft.Extensions.Configuration;”

?3.注册DbContext服务,AppDbcontext 为上文创建的上下文连接器,如下所示

services.AddDbContext<AppDbcontext>();

4.通过UseSqlite,选择sqlite数据库(若使用sqlserver 则选择UseSqlServer),“student_connection”为连接字符串,名称自取,字符串的内容在下文Appsetting中设置

?通过以上4步完成startup中的设置,接下来完成连接字符串

3完成连接字符串指定数据库位置

连接字符串的设置在appsettings.json文件中,下图完成了一个连接字符串的内容,其中“Data Source=”属于建立sqlite数据库所需的参数,含义为数据源的位置,以“student.db”为名生成一个sqlite数据库,默认位置为项目位置。也可指定固定位置如?"student_connection": "Data Source=C:\\Users\\Desktop\\student.db"。

若是使用sqlserver 其连接字符串如下形式,server表示sqlserver实例,database为数据库名称,默认位置在“ “C:\Users\”,名称可以自定义,位置不可指定

?4生成数据库并添加种子数据

1.首先在Home控制器中添加AppDbcontext变量(或者在需要使用数据库的文件中),随后在构造函数中隐式调用该类实例(调用时会自动生成实例)

2.最重要的一步是_appDbcontext.Database.EnsureCreated(),该方法首先查看是否有该数据库,若有保持不变,若未建立数据库则创建数据库并将OnModelCreating()方法中的种子数据添加到数据库中

_appDbcontext.Database.EnsureCreated()

?3.通过index方法调用查看数据库中的数据,开始运行后网页显示了数据库中的数据

?同时在项目同文件夹中生成了名称为student.db的数据库

同时也可以在SQLiteStudio中查看该数据库,内容如下键名和种子数据均已经存储到数据库中,并且设置的ID和Age都非空(若想设置键值可空 可在实体中将Age属性改为"public int? Age { get; set; }"即可)

public int? Age { get; set; }

5过程中可能遇到的问题及办法

出现错误“InvalidOperationException: No database provider has been configured for this DbContext. A provider can be configured by overriding the 'DbContext.OnConfiguring' method or by using 'AddDbContext' on the application service provider. If 'AddDbContext' is used, then also ensure that your DbContext type accepts a DbContextOptions<TContext> object in its constructor and passes it to the base constructor for DbContext.”

可能是 直接利用构造函数显式声明“_appDbcontext = new AppDbcontext();”而在AppDbcontext类中没有重写OnConfiguring()方法。如果想要显式声明,必须要重写OnConfiguring()方法

_appDbcontext = new AppDbcontext()

在startup.cs中则只需注册服务即可,不需连接字符串,亦无须在appsetting.json中设置字符串。

这种方法的缺点在于数据库连接字符串在程序内部,不易修改。?建议如本文一样隐式声明数据库实例,便于更改数据库位置


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Cmvc连接 #sqlite数据库