3

나는 내 인생에서이 오류 메시지를 제거 할 수 없습니다. 나는 할 수있는 거의 모든 것을 시도했다.보류중인 변경 사항이있어 자동 마이그레이션이 비활성화되어 현재 모델과 일치하도록 데이터베이스를 업데이트 할 수 없습니다.

MyDBContext.cs

 public MyDBContext() : base("ConnStr_Dev") 
    { 

    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, DbMigrationsConfiguration<MyDBContext>>()); 
     //Database.SetInitializer<MyDBContext>(null); 
     base.OnModelCreating(modelBuilder); 
    } 

GenericRepository.cs는

 public void Insert(T obj) 
    { 
     table.Add(obj);  //this is where it throws the error, inserting first time. 
    } 

는 다른 조합으로 모든 이들의 시도

사용-마이그레이션 -EnableAutomaticMigrations -Force을

초기 마이그레이션 추가 -IgnoreChanges

업데이트 데이터베이스

나는 전체 데이터베이스를 삭제하는 마이그레이션 테이블 삭제를 시도했습니다.

마이그레이션 전문가가 만족합니까?

편집 : DAL에는 GenericRepository 및 컨텍스트 클래스가 포함되어 있습니다.

+0

이 줄의 코드는 다음과 같아야합니다 :'Database.SetInitializer (new MigrateDatabaseToLatestVersion ()); 이게 효과가 있다고 해설한다면? –

+0

데이터베이스가 최신 상태인지 확인하는 더 좋은 방법은'Database.SetInitializer (new MigrateDatabaseToLatestVersion >());''Application_Start()'메소드로 이동하는 것입니다. –

+0

초기화 프로그램을 정적 생성자로 옮깁니다. 콘솔에서 컨텍스트가있는 프로젝트를 선택했는지 확인하십시오 (또는 명령 매개 변수를 사용하여 가리키고 있음). ID를 사용하고 있습니까? (자체 컨텍스트가 있습니까?) –

답변

2
  1. 열기 Package Manager ConsoleEnable-Migrations
  2. 완료를 초기 마이그레이션을 Add-Migration Initial
  3. Update-Database
  4. 추가 데이터베이스에서 dbo.__MigrationHistory 테이블을 삭제 솔루션에서 Migrations 폴더를 삭제
+0

답장을 보내 주셔서 감사합니다.하지만 이미이 문제를 시도했지만 잘못하고있는 문제가 있습니다. 확실히 DAL 프로젝트에서 Migrations를 실행해야합니다. – adityawho

+0

당신의 연결 고리를 확인 했습니까? appsetting은 옳고 주석 처리되지 않았습니다. 제 경우에는 해결되었습니다. – HydTechie

1

하나 이상의 엔티티 클래스를 변경했을뿐입니다. 새 속성을 추가 했든, 특정 속성의 데이터 형식을 변경 했든, 단순히 새 항목 클래스를 추가 했더라도 새로운 마이그레이션을 추가해야 할 경우에 유용합니다.

당신은 이미 당신의 DBContext 클래스 포함 된 프로젝트 선택한 구성 클래스와 을 당신이 을했습니다 패키지 관리자 콘솔에서 추가 마이그레이션 명령을 실행할 때 확인하십시오 것을 시도한 것을보고 마이그레이션 폴더. 또한 특정 연결 문자열을 MyDBContext 클래스의 기본 클래스 (DbContext)로 전달하고 있습니다. 올바른 데이터베이스를 업그레이드하고 업데이트하는지 확인하십시오.

특정 데이터베이스에 추가 마이그레이션 명령 및 업데이트 명령을 수행 할 수 있다는 사실을 알고 :

예 미리보기 :

Add-Migration AddProperty1 -ConnectionString "Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabaseCatablog;Connect Timeout=30;User ID=MyUser;Password=mypassword12345" -ConnectionProviderName "System.Data.SqlClient" -Verbose 

Update-Database -ConnectionString "Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabaseCatablog;Connect Timeout=30;User ID=MyUser;Password=mypassword12345" -ConnectionProviderName "System.Data.SqlClient" -Verbose 

희망이 도움이됩니다.

0

내 경우에는 DatabaseInitializerForType ... appSetting을 추가하여 오류가 해결되었습니다. 이 오류는 내 경우에는 충분히 이상한

<appSettings> 
<add key="DatabaseInitializerForType EasyEntity.EasyContext, EasyEntity" value="EasyEntity.EasyInitializer, EasyEntity" /> 
0

, 내가 ConnectionString을 설정 주석을 제거하는 것을 잊었다,이 오류를 해결 적절한 ConnectionString을 갖는 것을 의미한다. 희망이 도움이됩니다!

0

나는이 오류와도 싸웠다. 마이그레이션을 추가하고 사소한 변화라고 생각한 것을 만들었습니다.

이 속성 : 이전의 IMigrationMetadata.Target은 임의적이지 않습니다. 마이그레이션이 완료된 시점의 모델 상태를 기반으로 계산됩니다. (지나치게 단순화 된 것일 수 있습니다.)

따라서 추가 변경을 수행하면 보류중인 변경이 추가로 필요하므로 다른 마이그레이션이 필요합니다.

필자의 경우 변경 사항이 소스 제어에 커밋되지 않았기 때문에 마이그레이션을 삭제하고 다시 추가하는 것이 수정되었습니다. 오류 메시지가 무엇인지 알지 못하면 오류 메시지가 분명하지 않기 때문에 원인을 파악하는 데 시간이 걸립니다. 그러나 내가 배운 교훈 (상대적으로 EF에 처음으로 익숙한)은 모델을 변경하기 위해 새로운 마이그레이션 또는 작업중인 마이그레이션을 다시 수행해야한다는 것입니다.

관련 문제