上篇咱們介紹了怎麼經過已有的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表的映射實體類會寫到這裏。git
接着咱們經過NuGet給各個Project添加EntityFrameworkCore的引用,其中DataAccess須要EntityFrameworkCore.Tools以及EntityFrameworkCore.SqlServer,啓動項EfCodeFirst須要EntityFramework.Design。github
同時還要把CodeFirst所需的代碼給補上,在Entities工程中咱們添加TodoItem類:shell
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相關文件會生成到別的工程。ide
InitDatabase是我給Migrations腳本指定的名字,在DataAccess工程中,會加上時間前綴生成對應的Migrations類,以以下形式呈現:函數
此時仍沒有建立SQLServer表,咱們須要在Package Manager Console提示"Build succeeded."後。經過Update-Database命令來把修改應用到SQLServer中。ui
至此咱們就能夠使用TodoContext來訪問SQLServer中的TodoItems表了,在EfCodeFirst工程的Main函數裏添加以下代碼,每次Main函數啓動時查詢TodoItems表的記錄條數,而後新增一條記錄。spa
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:3d
https://github.com/manupstairs/EntityFrameworkCoreSamples/tree/main/CodeFirstSamplecode