MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
2017-08-23 08:51
961 查看
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:https://github.com/starts2000/EFCoreDemo,如果觉得对你有帮助,就给个 Star 吧。
一、工具及环境
- Visual Studio 2017 15.3
- .NET CORE 2.0 SDK
二、Entity Framwork Core 2.0 MySql Code First 及 数据库迁移(Migration)
1、创建 .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】项目结构如下:
3、创建 .NET Core 控制台应用项目 【Starts2000.EFCoreCodeFirst.Test】
- 添加对 【Starts2000.EFCoreCodeFirst】项目的引用;
- Nuget 添加 Microsoft.EntityFrameworkCore.Tools 及 Pomelo.EntityFrameworkCore.MySql(注意勾上:包括预发行版) 的引用;
4、编辑 Starts2000.EFCoreCodeFirst.Test.csproj 项目文件,添加如下内容:
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>
最终内容如下:
<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 类(注意:把数据库连接字符串修改为自己的)
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(); } }
6、打开命令行窗口,切换到 【Starts2000.EFCoreCodeFirst.Test】项目文件夹目录,执行如下命令:
dotnet ef migrations add InitialCreate
如果命令执行成功,可以看到项目目录中新增了如下内容:
7、执行 dotnet ef database update
命令
执行成功后,可以看到数据库及表创建成功。
8、修改实体,并把修改的内容更新到数据库
User 类的 Account 属性对应 User 表的 Account 列应该是唯一的,前面忘记了设置唯一索引,现在在 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(); } }
执行
dotnet ef migrations add UserTableUpdateAccount命令:
如果命令执行成功,可以看到项目目录中新增了如下内容:
接着按照 步骤7 的操作,如果成功,可以看到 User 表已经创建了 Account 的唯一索引:
9、测试数据写入和读取
在 Main 函数中添加如下代码:
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】项目设置为启动项目,编译运行:
三、Entity Framwork Core 2.0 MySql Database First
1、新建 【Starts2000.EFCoreDbFirst】 项目
2、Nuget 添加 Pomelo.EntityFrameworkCore.MySql(注意勾上:包括预发行版) 的引用;
3、编辑 Starts2000.EFCoreDbFirst.csproj 项目文件,添加如下内容:
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>
最终内容如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.0-rtm-10057" /> </ItemGroup> <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup> </Project>
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 = 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】项目设置为启动项目,编译运行:
参考文章:
相关文章推荐
- MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- EF Core 2.0使用MsSql/MySql实现DB First和Code First
- Code First for Mysql 错误:未为提供程序“MySql.Data.MySqlClient”找到任何 MigrationSqlGenerator。请在目标迁移配置类中使用 SetSql
- .net core 2使用ef core 2.0以db first方法创建实体类
- MySQL中select语句介绍及使用示例
- EF6 在原有数据库中使用 CodeFirst 总复习(三、重建迁移)
- java使用jdbc连接数据库工具类和jdbc连接mysql数据示例
- EF6 在原有数据库中使用 CodeFirst 总复习(三、重建迁移)
- 使用SQL database Migration wizard迁移数据库时的varchar中文乱码问题
- oracle 数据库 迁移到mysql 简单高效工具使用
- 关于mysql 数据库使用spring 2.0低版本 JdbcTemplate.queryForList 查询结果别名不起作用的解决方法
- 支持“XXXDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=2
- code first 使用已有的数据库并且改为Dbfirst获取Models的方法和TT模版
- mysql使用mysqldump 与 mysqlimport进行数据库迁移
- 单元测试日期使用ibatis将数据库从oracle迁移到mysql的几个修改点
- 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
- 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移
- 使用ibatis将数据库从oracle迁移到mysql的几个修改点