示例:EntityframeWorkCore应用MySql做数据迁移

一、目的:应用EF Core和MySql数据库了解做数据库迁移的步骤

二、步骤:

1、新建类库(core)并创建DataContext

   public class DataContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL("server=localhost;userid=****;pwd=****;port=****;database=****;sslmode=none;");
        }

        public  DbSet<City> Citys { get; set; }    
    }

    public class City
    {
        public int Id { get; set; }
        public string Name { get; set; }


        public DateTime CDate { get; set; }
    }

2、安装Nuget包:MySql.Data.EntityFrameworkCore

3、安装Nuget包:MySql.Data.EntityFrameworkCore.Design

4、安装Nuget包:Microsoft.EntityFrameworkCore.Tools

5、在程序包管理控制台页面输入:get-help entityframework 查看所有可执行的命令

程序包管理器:工具->Nuget包管理系

Cmdlet                      Description
        --------------------------  ---------------------------------------------------
        Add-Migration               Adds a new migration.

        Drop-Database               Drops the database.

        Get-DbContext               Gets information about a DbContext type.

        Remove-Migration            Removes the last migration.

        Scaffold-DbContext          Scaffolds a DbContext and entity types for a database.

        Script-Migration            Generates a SQL script from migrations.

        Update-Database             Updates the database to a specified migration.

6、执行命令一:add-migration +迁移名称

  输出:没有报错,并且生成文件夹“Migrations”和如下文件,表示执行成功

    public partial class init : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
                name: "Citys",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("MySQL:AutoIncrement", true),
                    Name = table.Column<string>(nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Citys", x => x.Id);
                });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "Citys");
        }
    }

7、执行命令二:update-datebase

输出:Done 并且数据库生成数据表或执行更改,表示执行成功

注:同时也可以应用命令Script-Migration可以生成数据库Sql脚本,在数据库执行

  IF EXISTS(SELECT 1 FROM information_schema.tables 
  WHERE table_name = '
__EFMigrationsHistory' AND table_schema = DATABASE()) 
BEGIN
CREATE TABLE `__EFMigrationsHistory` (
    `MigrationId` varchar(150) NOT NULL,
    `ProductVersion` varchar(32) NOT NULL,
    PRIMARY KEY (`MigrationId`)
);

END;

CREATE TABLE `Citys` (
    `Id` int NOT NULL AUTO_INCREMENT,
    `Name` text NULL,
    PRIMARY KEY (`Id`)
);

INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('20190513100712_init', '2.2.4-servicing-10062');

ALTER TABLE `Citys` ADD `CDate` datetime NOT NULL DEFAULT '0001-01-01 00:00:00.000000';

INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('20190513101011_changecity', '2.2.4-servicing-10062');

INSERT INTO `Citys` (`Id`, `CDate`, `Name`)
VALUES (1, '0001-01-01 00:00:00.000000', '成都');

INSERT INTO `Citys` (`Id`, `CDate`, `Name`)
VALUES (5, '0001-01-01 00:00:00.000000', '北京');

INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('20190513104003_changehasdata', '2.2.4-servicing-10062');

常见问题:

1、如果报“Table 'test.__efmigrationshistory' doesn't exist”表不存在错误,可以手动执行一次初始化sql语句

 CREATE TABLE `__EFMigrationsHistory`
 (
 `MigrationId` nvarchar(150) NOT NULL,
 `ProductVersion` nvarchar(32) NOT NULL,
PRIMARY KEY(`MigrationId`)
 );

2、如果报“Value cannot be null. Parameter name: input ”则是少安装Nuget包,如:Microsoft.EntityFrameworkCore.Tools

以上就是EF Core 针对MySql数据库做迁移的方法和步骤

示例地址: https://github.com/HeBianGu/.NetCore-LearnDemo.git

猜你喜欢

转载自blog.csdn.net/u010975589/article/details/90178273
今日推荐