2013-04-22 4 views
0

코드 첫 마이그레이션과 코드 기반 마이그레이션 작업을 시도하고 있습니다 (Automatedmigration = false). 그건 지금 내가 할 수있는 일 :EF 코드 처음 마이그레이션 : SetInitializer 및 초기화

는 마이그레이션을 사용 -run

- 추가 마이그레이션 초기

합니다 (migrationhistory 테이블을 만들려면) "데이터베이스 갱신"을 사용하여, 일루와 마이그레이션

문구를 넣을 변경 내 모델

-execute 추가 마이그레이션 "changesInMyModel"이제

에 내가 뭘하려고 모두 실행할 수있다 자동으로 마이 그 레이션. 같은 사용 일 : 후

[Test] 
public void UpdateDataModel() 
{ 
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<MyContext, MyConfiguration>()); 
var dc = new MyContext(); 
dc.Database.Initialize(true); 
} 

테스트를 실행하고 난 내 변경 사항을 볼 수있는 데이터베이스로 이동합니다. 무엇을 할 수 있습니까? 조언을 환영합니다!

업데이트 : Myconfiguration 클래스에서 Automatedmigration = false를 사용 중입니다.

MyConfiguration 클래스는 공용이며 외부 프로젝트의 부모 프로젝트 외부에 표시됩니다.

소스 코드에서 Database.SetInitializer를 사용하고 있기 때문에 app.config에서 구성을 사용하지 않을 것입니다.

내 테스트 MigrationHistory은 마이그레이션이 잘 실행 콘솔 패키지 관리자에서 업데이트 데이터베이스를 실행

만들어 실행하기 전에

.

업데이트 : 예 : http://msdn.microsoft.com/en-us/data/jj591621.aspx의 예제 (코드 기반 마이그레이션 사용)가 수정되었지만 문제가 여전히 있습니다. - 마이그레이션 사용 - 마이그레이션 추가 - SetInitializer 및 초기화를 시도하지만 아무 일도 일어나지 않습니다.

업데이트 :- SetInitializer 및 Initialize는 Automatedmigration = true 일 때 정상적으로 작동하며 모델의 변경 사항은 db와 동기화됩니다. - 코드를 사용하여 작동합니다.

new DbMigrator(new Configuration()).Update(); What should be the difference? 
+0

올바른 데이터베이스에 연결하고 있습니까? 'dc.Database.Connection.ConnectionString'이 당신이 기대하는 것인지 확인하십시오. – bricelam

+0

예, 올바른 연결 문자열로 작업 중입니다. – Rolando

+0

그 글과 이주 이니셜 라이저에 몇 개의 글이 있습니다.하지만 이니셜 라이저를 게시해야합니다. 그렇지 않으면 문제가 발생하지 않습니다 (다른 문제가 아닌) – NSGaga

답변

1

그리고 스레드의 댓글을 기반으로 업데이트하는 중 ...그냥 확인하는 온/오프 EnableAutomaticMigrations으로 시도 :

왜 그랬는지는 아직 확실하지 않다하지만 솔직히 로 -

문제를 해결했다. try-catch를 넣어 오류가 없는지 확인하십시오. w 또는 플래그하여 w/o 작업을해야

... 그리고 추가 의견

마이그레이션 - 직접 new DbMigrator(new Configuration()).Update() DbMigrator을 실행하려고합니다. 그리고 DbMigrator는 정확히 초기화 코드가 수행하는 작업을 수행합니다. 아무런 차이가없는 것 같습니다 - 이것은 소스 코드입니다 (동일한 EF 버전이 아니지만 동일하다고 생각합니다) - MigrateDatabaseToLatestVersion.

0

내 생각 엔 당신이 Global.asax.csprotected void Application_Start()에서 아래의 코드를 삽입하는 것을 시도해야한다. 이렇게하면 데이터베이스 연결은 항상 다른 모든 작업보다 먼저 초기화됩니다.

if (!WebSecurity.Initialized) 
      WebSecurity.InitializeDatabaseConnection("DefaultConnection", 
      "UserProfile", "UserId", "UserName", autoCreateTables: true); 

아마도 Pro Asp.Net Mvc 4은 테스트 프로젝트를 설정하는 데 도움이됩니다. MVC 3 version도 있지만 꽤 똑같은 말을합니다. 그들은 Moq Library을 사용하도록 제안했으며, 과거에 도움이되었습니다.

+0

귀하의 의견을 보내 주셔서 감사합니다, 그게 아직 내가 asp.net MVC에서 일하고 있지 않다는 것입니다 .. 난 그냥 도메인/DAL 프로젝트 및 테스트 프로젝트에서 일하고 :) – Rolando

+0

@ Rolando 내가 도움이 될만한 좀 더 정보를 추가했습니다 . 그러나 마침내 MVC 프로젝트에서 작업하기 시작하면 제안 된대로 Initializer를 설정하는 것을 잊지 마십시오. – Komengem

관련 문제