700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > migration mysql_MySql 使用 EF Core 2.0 CodeFirst DbFirst 数据库迁移(Migration)介绍及示例...

migration mysql_MySql 使用 EF Core 2.0 CodeFirst DbFirst 数据库迁移(Migration)介绍及示例...

时间:2020-09-04 03:44:57

相关推荐

migration mysql_MySql 使用 EF Core 2.0 CodeFirst DbFirst 数据库迁移(Migration)介绍及示例...

dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多。升级的过程中也少不了 Entity Framwork Core 的升级,在这篇文章中主要介绍下 MySql 数据库使用Entity Framwork Core 2.0 如何进行 Code First、Database First 及数据库迁移(Migration),虽然比较基础,但是做到尽量详细。本文所有示例代码已经提交到 GitHub:/starts2000/EFCoreDemo,如果觉得对你有帮助,就给个Star 吧。

一、工具及环境

Visual Studio 15.3

.NET CORE 2.0 SDK

二、Entity Framwork Core 2.0MySqlCode First 及数据库迁移(Migration)

1、创建 .NET Core 类库项目 【Starts2000.EFCoreCodeFirst】

2、添加 User 实体类

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】项目结构如下:

3、创建.NET Core 控制台应用项目 【Starts2000.EFCoreCodeFirst.Test】

添加对【Starts2000.EFCoreCodeFirst】项目的引用;

Nuget 添加Microsoft.EntityFrameworkCore.Tools 及Pomelo.EntityFrameworkCore.MySql(注意勾上:包括预发行版) 的引用;

4、编辑Starts2000.EFCoreCodeFirst.Test.csproj 项目文件,添加如下内容:

最终内容如下:

netcoreapp2.0

Exe

5、添加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();

}

}

6、打开命令行窗口,切换到 【Starts2000.EFCoreCodeFirst.Test】项目文件夹目录,执行如下命令:

dotnet ef migrations add InitialCreate

如果命令执行成功,可以看到项目目录中新增了如下内容:

7、执行dotnet ef database update 命令

执行成功后,可以看到数据库及表创建成功。

8、修改实体,并把修改的内容更新到数据库

User 类的 Account 属性对应 User 表的 Account 列应该是唯一的,前面忘记了设置唯一索引,现在在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();

}

}

执行dotnet ef migrations addUserTableUpdateAccount命令:

如果命令执行成功,可以看到项目目录中新增了如下内容:

接着按照 步骤7 的操作,如果成功,可以看到 User 表已经创建了 Account 的唯一索引:

9、测试数据写入和读取

在 Main 函数中添加如下代码:

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】项目设置为启动项目,编译运行:

三、Entity Framwork Core 2.0MySqlDatabase First

1、新建 【Starts2000.EFCoreDbFirst】 项目

2、Nuget 添加 Pomelo.EntityFrameworkCore.MySql(注意勾上:包括预发行版) 的引用;

3、编辑Starts2000.EFCoreDbFirst.csproj 项目文件,添加如下内容:

最终内容如下:

netcoreapp2.0

4、打开命令行窗口,切换到 【Starts2000.EFCoreDbFirst】项目文件夹目录,执行如下命令:

dotnet ef dbcontext scaffold"Server=localhost;User Id=test;Password=123456;Database=TestDb" "Pomelo.EntityFrameworkCore.MySql"

执行成功后,项目增加了如下内容:

5、创建.NET Core 控制台应用项目 【Starts2000.EFDbFirst.Test】进行测试

添加对【Starts2000.EFCoreDbFirst】项目的引用;

把 Main函数修改为如下代码:

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】项目设置为启动项目,编译运行:

参考文章:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。