[asp.net-mvc] EF 6 및 Code First 마이그레이션의 동일한 DB 및 애플리케이션에있는 여러 DB 컨텍스트

Entity Framework를 처음 사용합니다. EF 6을 사용하는 MVC 응용 프로그램을 설정하려고합니다. Code First 마이그레이션을 사용하고 있습니다. 앱에서 영역을 사용하고 있으며 각 영역에서 다른 DbContext를 사용하여 분리하고 싶습니다. EF 6에 ContextKey가 있다는 것을 알고 있지만 사용 방법에 대한 완전한 정보를 찾을 수 없습니다. 현재는 한 번에 하나의 컨텍스트 만 마이그레이션을 사용할 수 있습니다.

누군가 저와 같은 EF에 새로운 사람이 이해하고 사용할 수 있도록 충분한 세부 사항과 함께 예제를 줄 수 있습니까?



답변

Entity Framework 6 DbContext-ContextTypeName-MigrationsDirectory플래그 를 추가하여 다중에 대한 지원을 추가했습니다 . 패키지 관리자 콘솔에서 명령을 실행하고 아래 출력을 붙여 넣었습니다.

DbContext프로젝트에 2가 있고를 실행 enable-migrations하면 오류가 발생합니다 (아마도 이미 알고있을 것입니다).

PM> enable-migrations
More than one context type was found in the assembly 'WebApplication3'.
To enable migrations for 'WebApplication3.Models.ApplicationDbContext', use Enable-Migrations -ContextTypeName WebApplication3.Models.ApplicationDbContext.
To enable migrations for 'WebApplication3.Models.AnotherDbContext', use Enable-Migrations -ContextTypeName WebApplication3.Models.AnotherDbContext.

따라서 enable-migrations각각 DbContext개별적 으로 실행해야합니다 . 그리고 Configuration.cs생성 할 각 파일 에 대해 폴더를 지정해야합니다 .

PM> Enable-Migrations -ContextTypeName ApplicationDbContext -MigrationsDirectory Migrations\ApplicationDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project WebApplication3.

PM> Enable-Migrations -ContextTypeName AnotherDbContext -MigrationsDirectory Migrations\AnotherDbContext
Checking if the context targets an existing database...
Code First Migrations enabled for project WebApplication3.

DbContext에 대한 마이그레이션을 추가하려면 Configuration클래스의 정규화 된 이름을 지정하여 다음과 같이 수행합니다 .

PM> Add-Migration -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration "InitialDatabaseCreation"
Scaffolding migration 'InitialDatabaseCreation'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration InitialDatabaseCreation' again.

PM> Add-Migration -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration "InitialDatabaseCreation"
Scaffolding migration 'InitialDatabaseCreation'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration InitialDatabaseCreation' again.

그리고 update-database같은 방식으로 실행 합니다.

PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.ApplicationDbContext.Configuration
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201402032113124_InitialDatabaseCreation].
Applying explicit migration: 201402032113124_InitialDatabaseCreation.
Running Seed method.

PM> Update-Database -ConfigurationTypeName WebApplication3.Migrations.AnotherDbContext.Configuration
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201402032113383_InitialDatabaseCreation].
Applying explicit migration: 201402032113383_InitialDatabaseCreation.
Running Seed method.

도움이 되었기를 바랍니다.


답변