.NET Core學習筆記(9)——Entity Framework Core之Code First

上篇我們介紹了怎麼通過已有的SQLServer表來創建實體類,本篇我們改用Code First的方式,由C#代碼書寫的實體類來生成SQLServer表。並且通過簡單的Console APP往SQLServer表寫入數據。
首先我們先創建3個空的Projects,其中EfCodeFirst是作爲啓動項的Console程序(.NET Core 3.1)。EfCodeFirst通過Add Project Reference引用DataAccess工程(.NET Standard 2.0)。DataAccess將會包含DbContext對象,作爲數據庫的實際訪問接口。同時DataAccess還會Add Project Reference引用Entities工程(.NET Standard 2.0)。Entities工程顧名思義,所有SQLServer表的映射實體類會寫到這裏。

接着我們通過NuGet給各個Project添加EntityFrameworkCore的引用,其中DataAccess需要EntityFrameworkCore.Tools以及EntityFrameworkCore.SqlServer,啓動項EfCodeFirst需要EntityFramework.Design。

同時還要把CodeFirst所需的代碼給補上,在Entities工程中我們添加TodoItem類:

namespace Entities
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

在DataAccess工程中我們添加TodoContext對象,TodoContext繼承自DbContext,同時還引用TodoItem類。實際我們也正是通過TodoContext類來實現TodoItem對象在SQLServer中的增刪查改。注意這裏我們通過OnConfiguring方法來指定SQLServer的Connection String。

namespace DataAccess
{
    public class TodoContext : DbContext
    {
        public DbSet<TodoItem> TodoItems { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder options)
            => options.UseSqlServer(@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=CodeFirstDB;Integrated Security=True;");
    }
}

 

接下來我們就要通過在Package Manager Console窗口通過Add-Migration命令來創建SQLServer表了。注意Default project要選擇DataAccess,否則Migrations相關文件會生成到別的工程。

InitDatabase是我給Migrations腳本指定的名字,在DataAccess工程中,會加上時間前綴生成對應的Migrations類,以如下形式呈現:

此時仍沒有創建SQLServer表,我們需要在Package Manager Console提示"Build succeeded."後。通過Update-Database命令來把修改應用到SQLServer中。

至此我們就可以使用TodoContext來訪問SQLServer中的TodoItems表了,在EfCodeFirst工程的Main函數裏添加如下代碼,每次Main函數啓動時查詢TodoItems表的記錄條數,然後新增一條記錄。

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            using (var dbContext = new TodoContext())
            {
                var count = dbContext.TodoItems.Count();
                var item = new TodoItem { Name = $"test{++count}" };
                dbContext.Add(item);
                dbContext.SaveChanges();
            }
        }

GitHub:

https://github.com/manupstairs/EntityFrameworkCoreSamples/tree/main/CodeFirstSample

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章