• .NET 5学习笔记(10)——Entity Framework Core之切换SQLServer和SQLite


    上一篇我们梳理了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

  • 相关阅读:
    【力扣 005】103. 二叉树的锯齿形层序遍历
    Charles抓不到包常见原因排查
    接口签名规则及Java代码demo实现
    Java服务发起HTTPS请求报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
    springboot项目编译时,使用自定义注解类找不到符号
    Thread的join方法demo
    警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
    IDEA 报错:无效的源发行版 sourceCompatibility
    ThreadLocal本地局部线程demo
    Illegal character ((CTRLCHAR, code 31))问题排查 gzip接口返回 RestTemplate GET POST请求
  • 原文地址:https://www.cnblogs.com/manupstairs/p/14388375.html
Copyright © 2020-2023  润新知