code

EF Core - 표 '*._EF 마이그레이션'History'가 존재하지 않습니다.

starcafe 2023. 9. 15. 21:13
반응형

EF Core - 표 '*._EF 마이그레이션'History'가 존재하지 않습니다.

저는 이게 그렇다는 것을 강조하고 싶습니다.NET Core 및 EF 6.0 관련 스레드는 이 문제에 적용되지 않습니다.

했는데 DbContext를 할는 DI, DbContext를 할 때는 DbContext, DbContext를 할 dotnet ef database update -v 테이블션을지다를 생성하지 .__EFMigrationsHistory.

제가 먼저 해야 할 다른 명령어가 있나요, 아니면 이것이 EF Core MySQL 어댑터의 버그인가요?

MainDbContext

using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore.Extensions;
using Web.Models;

namespace Web.Infrastructure
{
    public class MainDbContext : DbContext
    {
        public DbSet<User> Users { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySQL("connection-string-here");
            base.OnConfiguring(optionsBuilder);
        }
    }
}

오류

DbContext 클래스를 찾는 중...

컨텍스트 'MainDbContext'를 사용합니다.

서버 'localhost'에서 데이터베이스 'db'를 사용하고 있습니다.

MySql.Data.MySql Client.MySqlException:테이블 db.__EF 마이그레이션'History'가 존재하지 않습니다.

테이블 db.__EF 마이그레이션역사'는 존재하지 않습니다.

project.json

{
  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "BundlerMinifier.Core": "2.2.301",
    "WebMarkupMin.AspNetCore1": "2.2.1",
    "MySql.Data.EntityFrameworkCore": "7.0.6-IR31",
    "Microsoft.EntityFrameworkCore.Design": "1.0.0-preview2-final"
  },
  "tools": {
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },
  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },
  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },
  "scripts": {
    "prepublish": [ "bower install", "dotnet bundle" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

템프 솔루션

dotnet ef migrations scriptMySQL에서 직접 실행할 수 있는 SQL 코드를 받습니다.마이그레이션 테이블이 생성되고 모든 작업이 정상적으로 작동합니다.이것은 나쁜 온도 용액입니다.마이그레이션을 가능하게 하는 "올바른" 방법이 무엇인지 여전히 궁금합니다.

마크 지의 댓글을 답으로 바꾸는 것.

__EF 마이그레이션이 완료되면기록 테이블이 생성되었으며, 나머지 업데이트가 실행됩니다.

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

또는 패키지 관리자 콘솔에서 다음 명령을 사용하여 마이그레이션 스크립트를 생성하고 데이터베이스에 수동으로 적용합니다.

Script-Migration

All scripts를 생성해야 할 경우 다음 명령을 사용할 수 있습니다.

Script-Migration -from 0

표준 Oracle 공급자를 사용하는 동안 동일한 문제가 발생했습니다.

질문에 따르면 Dot Net Entity Framework 데이터베이스 업데이트는 mysql 데이터베이스에 테이블을 만들지 않습니다. 아직 마이그레이션 기능이 구현되지 않았습니다.

SapientGuardian 프로바이더로 전환한 제안을 따랐는데, 지금이 최선의 방법인 것 같습니다.

편집: 댓글에 제시된 대로 2018년 시작 현재 포멜로가 최고의 옵션입니다.저는 원래 답변 이후로 다른 공급업체보다 그것을 선택했습니다.

같은 문제에 부딪히는데 OP 컨텍스트가 약간 다를 수 있지만 완성도를 위해 여기 답변이 있습니다.

이 문제가 발생할 수 있는 방법 중 하나는 다음과 같습니다.

  • 마이그레이션을 생성하고 데이터베이스를 업데이트하면,
  • 나중에 어떤 이유로 데이터베이스가 아닌 테이블을 삭제하고 update-dataabse 명령을 다시 실행하려고 합니다.

그 경우 OP에 의해 에러가 보고될 것입니다.

MySql.Data.MySql Client.MySqlException:테이블 db.__EF 마이그레이션'History'가 존재하지 않습니다.

이 경우 해결책은 전체 데이터베이스를 삭제하는 입니다.그 후 update-dataabse 명령이 성공적으로 실행됩니다.

mysql과만 관련이 있는지는 잘 모르겠지만 다시 시작해야 합니다.

  • 테이블을 삭제하고 기존 데이터베이스(이전에 마이그레이션이 있었음)를 사용하는 경우 update 명령을 사용하면 예외가 됩니다.
  • 데이터베이스 전체를 삭제하면 업데이트 명령이 완벽하게 실행됩니다.

저는 같은 문제가 있었지만 환경은 조금 달랐습니다.

문제는 마이그레이션을 실행하기 전에 이미 존재하는 데이터베이스로 마이그레이션을 실행하려고 했다는 것입니다.

요컨대,Make sure that you DO NOT create the database yourself. Let the migrations do it for you.

PHP/Laravel 배경에서 온 것, 그것은 나에게 명확하지 않았습니다 :)


내 환경이 무엇인지에 관심이 있다면 MacOS에 있는 내 SQL 서버.

공식 Oracle MySQL 공급자와 동일한 문제가 있었습니다.

방금 추가된 패키지:SapientGuardian 설치 패키지입니다.엔티티 프레임워크 코어.MySql과 마이그레이션이 성공했습니다!

언급URL : https://stackoverflow.com/questions/40597534/ef-core-table-efmigrationshistory-doesnt-exist

반응형