두 개의 웹 애플리케이션이 있습니다. 둘 다 동일한 데이터베이스를 참조하고 두 앱의 이전을 구성해야합니다. 두 응용 프로그램 모두 MigrateDatabaseToLatestVersion을 설정합니다. 빈 데이터베이스 응용 프로그램으로 시작하면 먼저 __MigrationHistory의 스키마를 만들고이 레코드를 만듭니다. 모든 것이 정상입니다. 하지만 두 번째 응용 프로그램을 시작하면 기존 데이터베이스 테이블을 변경해야하지만 응용 프로그램이 "...이 테이블이 이미 있습니다"라는 오류로 인해 충돌이 발생합니다. 이 문제를 해결하는 방법? 코드 두 번째 응용 프로그램의MigrateDatabaseToLatestVersion을 사용하여 두 개의 웹 애플리케이션에서 마이그레이션
예 작동하지 않을 것
Global.asax에
Database.SetInitializer(new SyncContextInitializer());
using (var context = new SyncDataContext())
{
context.Database.Initialize(force: true);
}
public class SyncContextInitializer : MigrateDatabaseToLatestVersion<SyncDataContext, SyncConfiguration>
{ }
public class SyncDataContext : DataContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new IdentityUserLoginMap());
.......
base.OnModelCreating(modelBuilder);
}
}
public sealed class SyncConfiguration : DbMigrationsConfiguration<SyncDataContext>
{
private readonly bool _pendingMigrations;
public SyncConfiguration()
{
AutomaticMigrationDataLossAllowed = true;
AutomaticMigrationsEnabled = true;
var migrator = new DbMigrator(this);
_pendingMigrations = migrator.GetDatabaseMigrations().Any();
}
......
.....
}
데이터베이스를 삭제하고 생성해야합니까? – Sampath
아니요, 이미 존재하는 테이블의 일부 필드를 업데이트하고 새로운 테이블을 만들어야합니다. 업데이트 클래스와 modelBuilder에 추가 된 새로운 엔티티 – 3axap
은'모델 변경시 데이터베이스 삭제 및 생성 '을 설정합니다. – Sampath