여러 DBContext를 사용하는 EF 7 마이그레이션

entity-framework-core

문제

문제가 scaffolding 및 여러 DBContexts 함께 클래스 라이브러리에서 마이그레이션을하고있다. 마이그레이션에 대해 다음과 같은 명령 줄 인수가 있음을 발견했습니다.

dnx ef migration add -c Contexts.IndustryContext initial

그러나 이것은 커맨드 라인 파서 (parser)에 의해서조차받지 못한다. 내 모든 DBContexts 및 데이터베이스 물건을 기본 MVC 6 웹 프로젝트 및 자신의 DLL에서 싶습니다. 이것이 가능한가? 어떤 커맨드 라인 마법이 필요합니까?

수락 된 답변

나는이 질문에 대한 답을 찾고 있었고 ef core 2.0에 대한 나의 해결책을 제공하고 싶었다.

Microsoft.EntityFrameworkCore.Tools.DotNetDbContext 가있는 각 클래스 라이브러리에 추가되어야합니다. 프로젝트를 마우스 오른쪽 단추로 클릭하고 Edit *.csproj 선택 Edit *.csproj . 그런 다음 다음을 추가하십시오.

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
  </ItemGroup>

참고 : 버전은이 게시물 시점의 최신 버전이며 향후 변경 될 수 있습니다.

그런 다음 Migrations.Console이라는 새로운 콘솔 응용 프로그램 (.NET Core)을 만들어 내 솔루션에 추가했습니다. 이 프로젝트에서 모든 DbContext 클래스 라이브러리를 참조해야합니다.

Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.Design Nuget 패키지를 설치했습니다.

Migrations.Console 앱에서 필자는 각 Db 컨텍스트에 대해 DbContextFactory 클래스를 만들었습니다.

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
  </ItemGroup>

참고 : 프로젝트에 맞게 컨텍스트 및 연결 문자열을 업데이트해야합니다.

이제 각 DbContextFactory 가 만들어 DbContextFactory 마이그레이션을 시작할 수 있습니다. 클래스 라이브러리의 폴더로 이동하십시오. 가장 쉬운 방법 Open Folder in File Explorer 프로젝트를 마우스 오른쪽 단추로 클릭하고 Open Folder in File Explorer 입니다. 그런 다음 File Explorer 의 주소 표시 줄에 cmd 하여 해당 폴더에서 명령 프롬프트를 엽니 다.

이제 다음 명령을 사용하여 마이그레이션을 만듭니다.

dotnet ef migrations add InitialCreate -c ApplicationDbContext --startup-project ../Migrations.Console/Migrations.Console.csproj

주 : 작업중인 컨텍스트의 이름과 일치하도록 ApplicationDbContext 를 변경하십시오. 또한 다른 이름으로 콘솔 프로젝트를 호출 한 경우 경로와 이름을 변경해야합니다.

이제 클래스 라이브러리에 Migrations 폴더가 표시됩니다.


인기 답변

아직 별도의 프로젝트에 데이터 레이어를 넣으려고하지 않았지만 단일 웹 API 프로젝트에 여러 DbContext가 있습니다. 그것도 별도의 프로젝트와 함께 작동합니다.

최신 구문 (v1.0.0)을 사용하면 다음과 같이 마이그레이션을 생성 할 수 있습니다.

dotnet ef migrations add <migration-name> -o <output-directory> -c <context>

여기서 <context>MyProject.Data.MyDbContext 와 같이 DbContext의 전체 클래스 이름입니다.

다른 컨텍스트의 마이그레이션을 다른 디렉토리에 집어 넣었지만 그렇게 할 필요는 없다고 생각합니다. migration-name 이 다른지 확인하십시오.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.