上一篇我们梳理了CodeFist的一般流程,本篇我们讨论如何在一套代码中,支持SQL Server和SQLite的切换。同时从本篇开始,我们从.NET Core 3.1 迁移到.NET 5。
相信.NET 到了5这个版本,所有人都不会再怀疑某软跨平台的决心。而且SQL Server也从2017版本开始支持Linux。但是我相信在Linux上使用Visual Stuido Code时,搭配SQLite更能体现某软现任CEO崽卖爷田不心疼的精神。
SQLite是非常常见的数据库,最大的特点就是零部署,以文件的形式存在与Application中,极大地方便了客户端软件的安装。那么我们在做一些小型项目时,为了方便部署。就选择将免费的SQL Server Express替换成不要钱的SQLite。后者的作者在前些年宣布将SQLite贡献给全人类,放弃一切权力,非常的伟大,我表示由衷的钦佩。
首先我们按照上一篇《.NET Core学习笔记(9)——Entity Framework Core之Code First》搭建如下结构的工程,以实现对SQL Server的访问。
和上一篇稍有不同的是,我将之前DataAccess工程加了后缀SQLServer,同时建立了一个新的空Library叫DataAccess.SQLite。
为了能够支持SQLite,我们需要通过NuGet给DataAccess.SQLite工程添加EntityFrameworkCore.Sqlite和EntityFramework.Tools两个引用。
值得一提的是,这里EntityFrameworkCore的引用版本从之前的3.1.x升级到了5.0.2。这是因为从本篇开始,示例工程将全部升级到.NET 5版本。也就是说,再也不用区别作为启动项的.NET Core 3.1工程,和作为Library的.NET Standard 2.0了。某软最终创造了“生命的大和谐”(该词解释权归梁羽生先生所有)。
话说我们到现在还没有创建SQLite数据库文件……我一般是去下载DB Browser for SQLite 来创建*.db。只需新建一个空数据库文件即可,数据库表将通过EntityFrameworkCore来创建。DB Browser for SQLite是一个常见的SQLite管理工具,当然还有很多其他的收费或免费的工具。
将新建的SwitchDB.db文件拷贝到启动项SwitchDatabase工程中,并将属性中的Copy to Output Directory更改为Copy if newer,SwitchDB文件会在编译后拷贝到运行目录。
同时不要忘记给SwitchDatabase工程添加对DataAccess.SQLite工程的引用。
我们将Class1.cs修改为TodoSQLiteContext,和SQLServer所用的DbContext唯一的不同只有连接字符串。
namespace DataAccess.SQLite { public class TodoSQLiteContext : DbContext { public DbSet<TodoItem> TodoItems { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite("Data Source=SwitchDB.db"); } }
通过前篇提到的,在Package Manager Console窗口中使用Add-Migration和Update-Database命令来创建数据库表到SQLite数据库中。
在完成上述步骤后,当前工程适配SQLite的工作即已完成。接下来,就是在SwitchDatabase工程中的Program文件中,将原先连接到SQLServer的TodoContext替换成TodoSQLiteContext。
namespace SwitchDatabase { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); using (var dbContext = new TodoSQLiteContext()) //using (var dbContext = new TodoContext()) { var count = dbContext.TodoItems.Count(); var item = new TodoItem { Name = $"test{++count}" }; dbContext.Add(item); dbContext.SaveChanges(); } } } }
按F5运行程序,然后再通过DB Browser for SQLite打开..SwitchDatabaseinDebug et5.0目录下的SwtichDB.db文件,即可以看到我们插入的数据了。
本篇我们介绍了如何通过EntityFrameworkCore切换支持SQLServer和SQLite的基本概念。
GitHub:
https://github.com/manupstairs/EntityFrameworkCoreSamples/tree/main/SwitchDatabaseSample