migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...
dotnet core 2.0 發(fā)布已經(jīng)好幾天了,期間也把原來(lái) dotnet core 1.1 的 MVC 項(xiàng)目升級(jí)到了 2.0,升級(jí)過(guò)程還是比較順利的,變動(dòng)也不是太多。升級(jí)的過(guò)程中也少不了 Entity Framwork Core 的升級(jí),在這篇文章中主要介紹下 MySql 數(shù)據(jù)庫(kù)使用?Entity Framwork Core 2.0 如何進(jìn)行 Code First、Database First 及數(shù)據(jù)庫(kù)遷移(Migration),雖然比較基礎(chǔ),但是做到盡量詳細(xì)。本文所有示例代碼已經(jīng)提交到 GitHub:https://github.com/starts2000/EFCoreDemo,如果覺(jué)得對(duì)你有幫助,就給個(gè)?Star 吧。
一、工具及環(huán)境
Visual Studio 2017 15.3
.NET CORE 2.0 SDK
二、Entity Framwork Core 2.0?MySql?Code First 及?數(shù)據(jù)庫(kù)遷移(Migration)
1、創(chuàng)建 .NET Core 類庫(kù)項(xiàng)目 【Starts2000.EFCoreCodeFirst】
2、添加 User 實(shí)體類
public classUser
{public int Id { get; set; }
[MaxLength(32), Required]public string Aaccount { get; set; }
[MaxLength(32), Required]public string Password { get; set; }
}
最終【Starts2000.EFCoreCodeFirst】項(xiàng)目結(jié)構(gòu)如下:
3、創(chuàng)建?.NET Core 控制臺(tái)應(yīng)用項(xiàng)目 【Starts2000.EFCoreCodeFirst.Test】
添加對(duì)?【Starts2000.EFCoreCodeFirst】項(xiàng)目的引用;
Nuget 添加?Microsoft.EntityFrameworkCore.Tools 及?Pomelo.EntityFrameworkCore.MySql(注意勾上:包括預(yù)發(fā)行版) 的引用;
4、編輯?Starts2000.EFCoreCodeFirst.Test.csproj 項(xiàng)目文件,添加如下內(nèi)容:
最終內(nèi)容如下:
netcoreapp2.0
Exe
5、添加?TestDbContext?類(注意:把數(shù)據(jù)庫(kù)連接字符串修改為自己的)
public classTestDbContext : DbContext
{public DbSet User { get; set; }protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("server=localhost;database=TestDb;user=test;password=123456;");
}protected override voidOnModelCreating(ModelBuilder modelBuilder)
{base.OnModelCreating(modelBuilder);//modelBuilder.Entity().HasIndex(u => u.Aaccount).IsUnique();
}
}
6、打開命令行窗口,切換到 【Starts2000.EFCoreCodeFirst.Test】項(xiàng)目文件夾目錄,執(zhí)行如下命令:
dotnet ef migrations add InitialCreate
如果命令執(zhí)行成功,可以看到項(xiàng)目目錄中新增了如下內(nèi)容:
7、執(zhí)行?dotnet ef database update 命令
執(zhí)行成功后,可以看到數(shù)據(jù)庫(kù)及表創(chuàng)建成功。
8、修改實(shí)體,并把修改的內(nèi)容更新到數(shù)據(jù)庫(kù)
User 類的 Account 屬性對(duì)應(yīng) User 表的 Account 列應(yīng)該是唯一的,前面忘記了設(shè)置唯一索引,現(xiàn)在在?TestDbContext?中加上:
public classTestDbContext : DbContext
{public DbSet User { get; set; }protected override voidOnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql("server=localhost;database=TestDb;user=test;password=123456;");
}protected override voidOnModelCreating(ModelBuilder modelBuilder)
{base.OnModelCreating(modelBuilder);
modelBuilder.Entity().HasIndex(u =>u.Aaccount).IsUnique();
}
}
執(zhí)行?dotnet ef migrations add?UserTableUpdateAccount?命令:
如果命令執(zhí)行成功,可以看到項(xiàng)目目錄中新增了如下內(nèi)容:
接著按照 步驟7 的操作,如果成功,可以看到 User 表已經(jīng)創(chuàng)建了 Account 的唯一索引:
9、測(cè)試數(shù)據(jù)寫入和讀取
在 Main 函數(shù)中添加如下代碼:
static void Main(string[] args)
{using(var context = newTestDbContext())
{
context.User.Add(newModels.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】項(xiàng)目設(shè)置為啟動(dòng)項(xiàng)目,編譯運(yùn)行:
三、Entity Framwork Core 2.0?MySql?Database First
1、新建 【Starts2000.EFCoreDbFirst】 項(xiàng)目
2、Nuget 添加 Pomelo.EntityFrameworkCore.MySql(注意勾上:包括預(yù)發(fā)行版) 的引用;
3、編輯?Starts2000.EFCoreDbFirst.csproj 項(xiàng)目文件,添加如下內(nèi)容:
最終內(nèi)容如下:
netcoreapp2.0
4、打開命令行窗口,切換到 【Starts2000.EFCoreDbFirst】項(xiàng)目文件夾目錄,執(zhí)行如下命令:
dotnet ef dbcontext scaffold"Server=localhost;User Id=test;Password=123456;Database=TestDb" "Pomelo.EntityFrameworkCore.MySql"
執(zhí)行成功后,項(xiàng)目增加了如下內(nèi)容:
5、創(chuàng)建?.NET Core 控制臺(tái)應(yīng)用項(xiàng)目 【Starts2000.EFDbFirst.Test】進(jìn)行測(cè)試
添加對(duì)?【Starts2000.EFCoreDbFirst】項(xiàng)目的引用;
把 Main?函數(shù)修改為如下代碼:
static void Main(string[] args)
{using (var context = newTestDbContext())
{
context.User.Add(newUser
{
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】項(xiàng)目設(shè)置為啟動(dòng)項(xiàng)目,編譯運(yùn)行:
參考文章:
總結(jié)
以上是生活随笔為你收集整理的migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 删除顺序_mysql 添加字
- 下一篇: mysql文字字符集_MySQL字符集