.NET 5學習筆記(10)——Entity Framework Core之切換SQLServer和SQLite

樓上那個蜀黍發表於2021-02-08

上一篇我們梳理了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開啟..\SwitchDatabase\bin\Debug\net5.0目錄下的SwtichDB.db檔案,即可以看到我們插入的資料了。

本篇我們介紹瞭如何通過EntityFrameworkCore切換支援SQLServer和SQLite的基本概念。
GitHub:
https://github.com/manupstairs/EntityFrameworkCoreSamples/tree/main/SwitchDatabaseSample

相關文章