欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2023-12-28 12:12:28
...

一、目的:应用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

 

 

 

 

上一篇:

下一篇: