6

오늘은 슬픈 날입니다. 첫 번째 일은 오늘 "데이터베이스가 생성 된 이후 'DomainContext'컨텍스트를 지원하는 모델이 변경되었음을 알리는 EF 예외가 발생했습니다.". 자정과 가까워서이 오류가 계속 표시됩니다. . - 이것은 내 경력의 끝 나는 확신 아무것도 모델에서 변경되었습니다, 아직 오류가 등장 해요 (Entity Framework에서 빈 마이그레이션을 생성하지만 내 모델이 다르다고 주장합니다

나는 새로운 마이그레이션을 만드는 시도, 그것은 빈 나왔다 :

public void Up() 
{ 
} 
public void Down() 
{ 
} 

이 마이그레이션을 적용하면 어떤 좋은하지 않았다 - 오류가 난 널이기 위하여 initialiser를 설정하는 것이 일반적 제안을 사용했습니다 지속 :..

Database.SetInitializer<DomainContext>(null); 

를 그리고 그것이 내가 데이터베이스에 액세스 할 때 오류가 사라 만든하지만이 귀찮게 나. 대단히 - 코드를 통해 마이그레이션을 실행하려고 할 때마다 나는 simil을 본다. 다시 아칸소 오류 :

var configuration = new Migrations.Configuration(); 

configuration.TargetDatabase = new DbConnectionInfo("correct connection string", "System.Data.SqlClient"); 

var migrator = new DbMigrator(configuration); 

migrator.Update(); // <<-- exception is thrown here 

예외 던지기는 다음과 같습니다 : System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException을 : 보류중인 변경 및 자동 마이그레이션이 있기 때문에 현재의 모델과 일치하는 데이터베이스를 업데이트 할 수 없습니다 비활성화 . 보류 모델 변경 사항을 코드 기반 마이그레이션에 기록하거나 자동 마이그레이션을 활성화하십시오. 자동 마이그레이션을 사용하려면 DbMigrationsConfiguration.AutomaticMigrationsEnabled를 true로 설정하십시오.

이전에 6.0.2로 업데이트되었지만 차이점이 없었습니다.

내가 Nuget 콘솔을 통해 마이그레이션을 실행할 수있는 날 귀찮게 또 다른 것은 :

Update-Database 

실행합니다 벌금과 문제를 제공하지 않습니다. 하지만 DB의 initialiser를 설정하면 자동으로 마이그레이션을 실행합니다 :

보류중인 변경 및 자동 마이그레이션이 있기 때문에 현재의 모델과 일치하는 데이터베이스를 업데이트 할 수 없습니다
var initializer = new MigrateDatabaseToLatestVersion<DomainContext, Migrations.Configuration>(); 
Database.SetInitializer(initializer); 
var domainContext = new DomainContext(); 
domainContext.Database.Initialize(true); // <<-- this throws exception 

사용할 수 없습니다. 보류 모델 변경 사항을 코드 기반 마이그레이션에 기록하거나 자동 마이그레이션을 활성화하십시오. 자동 마이그레이션을 사용하려면 DbMigrationsConfiguration.AutomaticMigrationsEnabled를 true로 설정하십시오.

실제 질문은 Nuget 콘솔과 마이그레이션 DB-Initialiser를 통해 실행할 때 모델에 대해 다른 해시가있는 이유는 무엇입니까? 어떻게 다른지 (db-state와 모델)를 어떻게 찾을 수 있습니까? 그리고 이것을 고치는 방법, 그래서 해킹 (db-initaliser에 null 할당)을 사용할 필요가 없습니까?

+0

가짜 변경을 시도해보십시오. 테이블에 필드를 추가하고 마이그레이션을 생성 할 때 EF가 수행하는 작업을 확인하고 나중에 해당 필드를 제거한다고 가정 해 보겠습니다. –

+0

마이 그 레이션에서 그 분야와 그 이상을 추가하려고 시도했습니다. 나는 현재 EF 코드를 실행 중이며 오류의 원인을 찾은 것 같습니다. 일단 수정하면 블로그 포스트를 게시 할 것입니다. 다른 사람들에게 유용 할 수 있습니다. – trailmax

+1

@Guillelon이 문제를 발견했습니다. [AllowHtml] 속성이 모델의 속성 중 하나에 적용되었습니다. – trailmax

답변

6

내 문제의 원인은 모델 중 하나에 적용된 [AllowHtml] 속성입니다. MVC를 5.1.1로, WebApi를 2.1로 업데이트 한 후에 문제가 발생하기 시작했습니다.

EF-Model에서 해당 특성을 제거하고 데이터베이스를 제거한 후 다시 빌드하면 문제가 사라졌습니다.

나는 문제가 이런 종류의 디버깅하는 방법에 대한 블로그 게시물까지 작성했습니다 : 또한 http://tech.trailmax.info/2014/03/inside_of_ef_migrations/

내가이 [AllowHtml] 속성이 버그라고 생각을, 나는 재현 솔루션을 만들 것입니다 및에 버그 리포트를 제출한다 EF- 사람들.

업데이트 : 실제로 오류를 재현 할 수 없습니다. 클래스 속성의 [AllowHtml] 속성은 아무 관계가 없습니다. 그 마법의 결함.

+0

EF 사람들과이 정보를 게시 한 경우 궁금한 점이 있습니까? 그렇다면 피드백은 무엇입니까? – Kixoka

+0

@Kevin 실제로 빈 솔루션에서 같은 문제를 재현 할 수 없었습니다. 그래서 아무 곳에도 보도되지 않았다. – trailmax

+0

이 내용은 https://entityframework.codeplex.com/workitem/2167에보고 된 것으로 보입니다. 코멘트에는 비어있는 마이그레이션을 적용하여 6.1에서 추가 된 모델 상태가 업데이트된다는 내용이 언급되어 있습니다. 이전 버전에는 없었습니다. – Patrick

0

오늘 같은 문제가있었습니다. 문제가 발생하기 전에 ViewModel, View 및 Html.EnableClientValidation()이 추가되었습니다.

모델이 전혀 변경되지 않았습니다. @Guilleon이 조언 한 바처럼 나는 가짜 변경을 수행하고 작업 마이그레이션을 만들었지 만 도움이되지 않았습니다.

그런 다음 Visual Studio를 다시 시작하고 모든 것이 다시 작동했습니다. 글리치가되어야합니다.