2

ASP.NET 5 프로젝트에서 EF6을 사용하고 있습니다. 내가 ASP.NET 인증을 인증 메커니즘으로 사용하고있는 곳. 누구나 할 수있는 것처럼 별도의 dll 프로젝트에서 내 도메인 객체를 모델링했으며 데이터 액세스 논리의 경우 별도의 프로젝트가 있습니다. 이 데이터 프로젝트에는 EF 마이그레이션, 도메인 모델, 저장소 및 작업 단위에 대한 DbContext가 포함되어 있습니다.여러 DbContexts로 데이터베이스 자동 업데이트

그리고 저는 ASP.NET 컨트롤러와 접촉하는 서비스 레이어가 있으며이 서비스 레이어는 데이터 레이어와 통신하고 필요한 작업을 수행합니다.

기본 ASP.NET 웹 프로젝트에서 Identity와 관련된 기본 DbContext가 있고 마이그레이션이 있습니다.

두 개의 DbContext가 있으면 자동으로 데이터베이스를 자동으로 업데이트 할 수 없습니다. 모델 변경을위한 마이그레이션을 만든 후에 단 하나의 DbContext 만 있으면 웹 사이트에 처음 액세스 할 때 자동으로 실행됩니다. 이것은 더 이상 발생하지 않습니다. 항상 "update-database"명령을 수동으로 실행해야합니다.

제가 지금 가지고있는 한 가지 해결책은 데이터 프로젝트에 "Microsoft.AspNet.Identity.EntityFramework"에 대한 참조를 추가하고 ID 컨텍스트에 내 도메인 테이블을 포함시키는 것입니다. 그러나 내 데이터 프로젝트에 ASP.NET 참조를 추가하는 것은 다른 옵션이 없으면하고 싶지 않습니다. 데이터 레이어가 웹 레이어와 직접 통신하지 않기 때문입니다.

Scott Allen의 비디오 this이이 문제에 관해 논의하지만 해결 방법은 제안되지 않았습니다.

+0

안녕하세요 Geethanga, 저는 당신과 같은 프로젝트를 가지고 있습니다. 여기에서는 거의 동일한 문제가 있습니다. 패키지 관리 콘솔에서 2 개의 프로젝트로 전환하면 두 개의 데이터베이스를 업데이트 할 수 있습니다. 그러나 푸른 색으로 프로젝트를 게시하면 dll 프로젝트의 마이그레이션 만 실행되고, 웹 프로젝트 (conatins identityContext)의 마이그레이션에는 마이그레이션을 실행할 수있는 옵션이 없습니다. DBMigrator를 사용하여 데이터베이스를 업데이트하는 방법에 대해 더 자세히 알 수 있습니까? 감사합니다 – ChengWhyNot

답변

1

database initializer을 사용하고 MigrateDatabaseToLatestVersion을 사용하여 명시 적으로 마이그레이션을 시작할 수 있습니다. 이 이니셜 라이저를 사용하면 사용할 컨텍스트 및 구성을 명시 적으로 지정할 수 있습니다. 같은 뭔가 :

SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); 

당신은 또한 응용 프로그램 시작시 할 때 효과적으로 Update-Database cmdlet에 같은 일을 수동으로 모든 로직을 호출 할 수 있습니다. DbMigrator class을보십시오.

+0

시작에서 호출로 DbMigrator를 사용하여 상황을 처리하기로 선택했습니다. – Geethanga

1

각 DbContext 생성자 내에서 개별적으로 마이그레이션을 실행할 수 있습니다.

+0

시작에서 호출로 DbMigrator를 사용하여 상황을 처리하기로 선택했습니다. Initializers를 사용하지 않습니다. – Geethanga

관련 문제