User {
publicintId { get; set; } [MaxLength(32), Required]
publicstringAaccount { get; set; } [MaxLength(32), Required]
publicstringPassword { 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 类( 注意:把数据库连接字符串修改为自己的) publicclassTestDbContext : DbContext {
publicDbSet User { get; set; }
protectedoverridevoidOnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("server=localhost;database=TestDb;user=test;password=123456;"); }
protectedoverridevoidOnModelCreating(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 中加上:
publicclassTestDbContext : DbContext {
publicDbSet User { get; set; }
protectedoverridevoidOnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("server=localhost;database=TestDb;user=test;password=123456;"); }
protectedoverridevoidOnModelCreating(ModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasIndex(u =>u.Aaccount).IsUnique();} }
执行 dotnet ef migrations add UserTableUpdateAccount 命令:
如果命令执行成功,可以看到项目目录中新增了如下内容:
接着按照 步骤7 的操作,如果成功,可以看到 User 表已经创建了 Account 的唯一索引:
9、测试数据写入和读取
在 Main 函数中添加如下代码:
staticvoidMain( string[] args) {
using( varcontext = 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.0 MySql Database 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 函数修改为如下代码:staticvoidMain( string[] args){
using( varcontext = 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】项目设置为启动项目,编译运行:
参考文章:
https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations
https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql