efcore数据库迁移(migration)

Lenny Lenny     2022-08-02     236

关键词:

工具与环境介绍

1.开发环境为vs 2015

2.mysql EF Core支持采用  Pomelo.EntityFrameworkCore.MySql   源代码地址(https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

场景

设计两张表 用户表(user)和发帖表(user)

一个用户对应多个用户

Coding Begin

1.新建项目(新建一个空console项目)

image

2.添加Nuget.config

增加两个feed,一个是Pomelo(mysql ef core的支持),一个是nuget

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="Pomelo" value="https://www.myget.org/F/pomelo/api/v3/index.json" />
    <add key="nuget.org" value="https://www.nuget.org/api/v2" />
  </packageSources>
</configuration>

 

image

3.在project.json中增加ef core的依赖,同时增加EF Tool(用于数据库的迁移)

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "Pomelo.EntityFrameworkCore.MySql": "1.0.0",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

 

4.增加User,Post实体 和DB数据库上下文文件

代码分别如下:
public class User  
 {      
     public int Id { set; get; }     
     
     public string UserName { set; get; }    
   
     public string Password { set; get; }  
 }

public class Post
{     
      public int Id { set; get; }     
      public string Title { set; get; }     
      public string Description { set; get; }    
      public DateTime CreatedDate { set; get; }     
      public int UserId { set; get; }
}

  public class DB : DbContext
    {

        public DbSet<User> Users { set; get; }

        public DbSet<Post> Posts { set; get; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         => optionsBuilder
             .UseMySql(@"Server=localhost;database=migrationtest;uid=root;pwd=Password12!;");
}
 

5.通过Migration生成数据库

在vs中的“程序包管理器控制台”中输入如下两个命令
Add-Migration init(执行此命令项目生成一个目录(Migration))
Update-Database init

执行之前

image
执行Add-Migration init(生成Migration文件夹)
image
 
执行 Update-Database init
image
执行命令之后,数据库生成
image
Post表
image

6.往数据库插入数据

image

image

 

7.修改实体字段,在post实体中增加一个字段和修改一个字段的名字

修改之后的post如下

public class Post
{    
     public int Id { set; get; }     
   
     public string Title { set; get; }
 
     public string Hint { set; get; }

     public DateTime CreatedDate { set; get; }    
   
     public int UserId { set; get; }   
  
     public string Remark { set; get; }

 
}

8.执行迁移的命令

Add-Migration updatedb
Update-Database updatedb

image

执行迁移之后的post表

image

efcore迁移

...删除A,将快照恢复成B,结束-----------------Update-Database1、数据库__EFMigrationsHistory中MigrationId字段和迁移文件做对比2、更新所有新于MigrationId字段的迁移3、更新后的迁移不可Remove4、如果要Remove已经更新的数据库操作,可以使用Update... 查看详情

Entity Framework Core 2.0 Add-Migration 不会创建任何迁移文件

】EntityFrameworkCore2.0Add-Migration不会创建任何迁移文件【英文标题】:EntityFrameworkCore2.0Add-Migrationdoesn\'tcreateanymigrationfiles【发布时间】:2018-02-0117:21:16【问题描述】:最近从EFCore1.0迁移到EFCore2.0,运行良好。今天我添加了一个新表... 查看详情

EF Core 迁移错误:PositionalParameterNotFound,Add-Migration

】EFCore迁移错误:PositionalParameterNotFound,Add-Migration【英文标题】:EFCoremigrationerror:PositionalParameterNotFound,Add-Migration【发布时间】:2021-12-2906:46:25【问题描述】:我正在使用EntityFrameWork当我尝试运行命令添加迁移时,我收到以下错... 查看详情

在应用所有 EF Core 迁移后运行代码

】在应用所有EFCore迁移后运行代码【英文标题】:RuncodeafterallEFCoremigrationsareapplied【发布时间】:2022-01-1515:06:43【问题描述】:EFCore5有各种events,但它们与DbContext相关。没有与迁移相关的事件(Migration)。我想在应用所有迁移后运... 查看详情

[efcore]数据迁移

摘要在实际项目中,大多都需要对业务逻辑以及操作数据库的逻辑进行分成操作,这个时候该如何进行数据的迁移呢?步骤上篇文章:EFCore数据迁移操作比如,我们将数据上下文放在了Data层。看一下BlogContext内容如下:publicclassB... 查看详情

使用entityframeworkcore时,通过代码自动migration

...模型有变动,我们要在用EFCore提供的命令行工具进行手工迁移,然后再运行程序。但是为了效率,我想能不能在程序的入口处进行Migration呢?从个人经验来说应该是可以,因为EFTool虽然提供了CLI但是它最终也是被程序解析这 查看详情

django迁移脚本

...了什么事情?1.将相关的迁移脚本翻译成sql语句,然后在数据库中执行2.如果sql语句执行没有问题,那么会将相关的迁移脚本的名字记录到数据库中django_migrations表中migrate怎么判断哪些迁移脚本需要执行?migrate会将代码中的迁移... 查看详情

migrations有两个文件迁移数据的方法

不分开迁移报错如下;解决方案1迁移Migration/nfoManageEntityFramework\\Enable-Migrations-ContextTypeNameInfoModel.Context.InfoManageContext-MigrationsDirectory:Migrations\\InfoManageEntityFramework\\add-migration-Confi 查看详情

efcore数据迁移

PackageReference是nuget包 DotNetCliToolReference 是dotnet 命令行工具 EFCore用到<DotNetCliToolReference Include=“Microsoft.EntityFrameworkCore.Tools.DotNet” Version=“1.0.0”  查看详情

使用entityframeworkcore时,通过代码自动进行migration

...模型有变动,我们要在用EFCore提供的命令行工具进行手工迁移,然后再运行程序。但是为了效率,我想能不能在程序的入口处进行Migration呢?从个人经验来说应该是可以,因为EFTool虽然提供了CLI但是它最终也是被程序解析这些命... 查看详情

flask-migrate数据库迁移(代码片段)

数据库迁移在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。 创... 查看详情

django迁移问题

...判断哪些迁移脚本需要执行:他会将代码中的迁移脚本和数据库中django_migrations中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。面试题2:migrate做了什么事情:将相关的迁移脚本翻... 查看详情

使用 rake db:migrate 迁移数据不会改变它

】使用rakedb:migrate迁移数据不会改变它【英文标题】:Migratingdatawithrakedb:migratedoesnotchangeit【发布时间】:2014-06-2006:40:44【问题描述】:我正在为rails和db:migrate苦苦挣扎。我使用此代码进行了迁移classSetDefaultInstallmentsForLicenses<Act... 查看详情

简单分析flask数据库迁移详情

参考技术A1、使用Flask-Migrate实现数据库迁移db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是... 查看详情

98.orm迁移详解,makemigrations,migrate

...文件中写迁移脚本。2.migrate:将生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构,以下是一些常用的选项:app_label:将某个app的迁移脚本映射到数据库中,如果没有指定,那么会将在所有的安装在INSTALLED_APPS中的... 查看详情

flask学习-15.flask-migrate数据迁移(代码片段)

前言Flask-SQLAlchemyORM可以直接操作数据库,可以用db.create_all()代码同步表到数据库。当我们需要修改表的字段,比如对表新增字段,修改字段的时候需用到flask-migrate插件来同步迁移数据。flask-migrate迁移数据django框架里... 查看详情

artisan migrate 命令不迁移,不产生输出

...述】:我正在做我的第一个Laravel项目。我正在尝试创建数据库迁移并使用artisanmigrate运行它们。迁移未运行,并且该命令不返回任何输出。关键事实:我使用artisanmake:migration创 查看详情

efcore开发模式之codefirst

...相关的实体类及DbContext派生类,然后通过映射关系自动在数据库中完成数据库表的创建。  本例中创建一个班级和学生的管理,主要有班级类MyClass和学生类Student。其中班级类MyClass中可包含多名学生Student,两者之间是一对多... 查看详情