MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
dotnet core 2.0 發(fā)布已經(jīng)好幾天了,期間也把原來 dotnet core 1.1 的 MVC 項目升級到了 2.0,升級過程還是比較順利的,變動也不是太多。升級的過程中也少不了 Entity Framwork Core 的升級,在這篇文章中主要介紹下 MySql 數(shù)據(jù)庫使用?Entity Framwork Core 2.0 如何進行 Code First、Database First 及數(shù)據(jù)庫遷移(Migration),雖然比較基礎(chǔ),但是做到盡量詳細(xì)。本文所有示例代碼已經(jīng)提交到 GitHub:https://github.com/starts2000/EFCoreDemo,如果覺得對你有幫助,就給個?Star 吧。
一、工具及環(huán)境
Visual Studio 2017 15.3
.NET CORE 2.0 SDK
二、Entity Framwork Core 2.0?MySql?Code First 及?數(shù)據(jù)庫遷移(Migration)
1、創(chuàng)建 .NET Core 類庫項目 【Starts2000.EFCoreCodeFirst】
2、添加 User 實體類
public class User{ ? ? ??public int Id { get; set; }[MaxLength(32), Required] ? ? ?
?public string Aaccount { get; set; }[MaxLength(32), Required] ? ?
? ?public string Password { get; set; }}
最終【Starts2000.EFCoreCodeFirst】項目結(jié)構(gòu)如下:
?
3、創(chuàng)建?.NET Core 控制臺應(yīng)用項目 【Starts2000.EFCoreCodeFirst.Test】
添加對?【Starts2000.EFCoreCodeFirst】項目的引用;
Nuget 添加?Microsoft.EntityFrameworkCore.Tools 及?Pomelo.EntityFrameworkCore.MySql(注意勾上:包括預(yù)發(fā)行版) 的引用;
4、編輯?Starts2000.EFCoreCodeFirst.Test.csproj 項目文件,添加如下內(nèi)容:
<ItemGroup><DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /></ItemGroup>最終內(nèi)容如下:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>netcoreapp2.0</TargetFramework><ApplicationIcon /><OutputType>Exe</OutputType><StartupObject /></PropertyGroup><ItemGroup><ProjectReference Include="..\Starts2000.EFCoreCodeFirst\Starts2000.EFCoreCodeFirst.csproj" /></ItemGroup><ItemGroup><PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /><PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.0-rtm-10058" /></ItemGroup><ItemGroup><DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /></ItemGroup></Project>?5、添加?TestDbContext?類(注意:把數(shù)據(jù)庫連接字符串修改為自己的)
?public DbSet<User> User { get; set; } ? ? ?
?protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseMySql( ? ? ? ? ? ? ? ?"server=localhost;database=TestDb;user=test;password=123456;");} ? ? ? ?
protected override void OnModelCreating(ModelBuilder modelBuilder){ ? ? ? ? ?
?base.OnModelCreating(modelBuilder); ? ? ? ? ? ?//modelBuilder.Entity<User>().HasIndex(u => u.Aaccount).IsUnique(); ? ? ? ?}}
6、打開命令行窗口,切換到 【Starts2000.EFCoreCodeFirst.Test】項目文件夾目錄,執(zhí)行如下命令:
dotnet ef migrations add InitialCreate?
如果命令執(zhí)行成功,可以看到項目目錄中新增了如下內(nèi)容:
7、執(zhí)行?dotnet ef database update??命令
執(zhí)行成功后,可以看到數(shù)據(jù)庫及表創(chuàng)建成功。
?8、修改實體,并把修改的內(nèi)容更新到數(shù)據(jù)庫
?User 類的 Account 屬性對應(yīng) User 表的 Account 列應(yīng)該是唯一的,前面忘記了設(shè)置唯一索引,現(xiàn)在在?TestDbContext?中加上:
public class TestDbContext : DbContext{ ? ? ??public DbSet<User> User { get; set; } ? ?
? ?protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseMySql( ? ? ? ? ? ? ? ?"server=localhost;database=TestDb;user=test;password=123456;");} ? ? ? ?
protected override void OnModelCreating(ModelBuilder modelBuilder){ ? ? ? ? ?
?base.OnModelCreating(modelBuilder); ? ? ? ? ? ?modelBuilder.Entity<User>().HasIndex(u => u.Aaccount).IsUnique();}}
執(zhí)行?dotnet ef migrations add?UserTableUpdateAccount?命令:
如果命令執(zhí)行成功,可以看到項目目錄中新增了如下內(nèi)容:
接著按照 步驟7 的操作,如果成功,可以看到 User 表已經(jīng)創(chuàng)建了 Account 的唯一索引:
9、測試數(shù)據(jù)寫入和讀取
在 Main 函數(shù)中添加如下代碼:
static void Main(string[] args){ ? ? ? ?? ?using(var context = new TestDbContext()){context.User.Add(new Models.User{Aaccount = "CodeFirst-Test-" + DateTime.Now.ToString("yyyyMMddHHmmssfff"),Password = "123456"});context.SaveChanges();Console.WriteLine(context.User.OrderByDescending(u => u.Id).FirstOrDefault()?.Aaccount);}Console.ReadKey();}
把【Starts2000.EFCoreCodeFirst.Test】項目設(shè)置為啟動項目,編譯運行:
三、Entity Framwork Core 2.0?MySql?Database First
1、新建 【Starts2000.EFCoreDbFirst】 項目
2、Nuget 添加 Pomelo.EntityFrameworkCore.MySql(注意勾上:包括預(yù)發(fā)行版) 的引用;
3、編輯?Starts2000.EFCoreDbFirst.csproj 項目文件,添加如下內(nèi)容:
<ItemGroup><DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /></ItemGroup>最終內(nèi)容如下:
?4、打開命令行窗口,切換到 【Starts2000.EFCoreDbFirst】項目文件夾目錄,執(zhí)行如下命令:
dotnet ef dbcontext scaffold "Server=localhost;User Id=test;Password=123456;Database=TestDb" "Pomelo.EntityFrameworkCore.MySql"執(zhí)行成功后,項目增加了如下內(nèi)容:
5、創(chuàng)建?.NET Core 控制臺應(yīng)用項目 【Starts2000.EFDbFirst.Test】進行測試
添加對?【Starts2000.EFCoreDbFirst】項目的引用;
把 Main?函數(shù)修改為如下代碼:
? ?using (var context = new TestDbContext()){context.User.Add(new User{Aaccount = "DbFirst-Test-" + DateTime.Now.ToString("yyyyMMddHHmmssfff"),Password = "123456"});context.SaveChanges();Console.WriteLine(context.User.OrderByDescending(u => u.Id).FirstOrDefault()?.Aaccount);}Console.ReadKey();}
把【Starts2000.EFCoreDbFirst.Test】項目設(shè)置為啟動項目,編譯運行:
?
參考文章:
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations
https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
相關(guān)文章:?
.NET Core 2.0 正式發(fā)布信息匯總
.NET Standard 2.0 特性介紹和使用指南
.NET Core 2.0 的dll實時更新、https、依賴包變更問題及解決
.NET Core 2.0 特性介紹和使用指南
Entity Framework Core 2.0 新特性
體驗 PHP under .NET Core
.NET Core 2.0使用NLog
升級項目到.NET Core 2.0,在Linux上安裝Docker,并成功部署
解決Visual Studio For Mac Restore失敗的問題
ASP.NET Core 2.0 特性介紹和使用指南
原文地址:http://www.cnblogs.com/Starts_2000/p/mysql-efcore20-codefirst-dbfirst-migration-demo.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 2.0迁移技巧之we
- 下一篇: Razor Page–Asp.Net C