런타임시 엔터티 프레임 워크를 사용하여 데이터베이스를 마이그레이션하려고합니다.런타임 유형을 사용하는 제네릭 형식의 메서드
Database.SetInitializer<TContext>(new MigrateDatabaseToLatestVersion<TContext,TMigrationsConfiguration>);
}
그러나 내가 런타임 때까지 TContext 또는 TMigrationsConfiguration를 모르는를 : 당신이 일반적으로 그렇게 얼마나
이입니다.
런타임 유형으로이 메소드를 어떻게 실행합니까?
foreach (IDatabaseInitializer<DbContext> initializer in moduleNeedingMigration.initializers)
{
System.Data.Entity.Database.SetInitializer(initializer);
}
그러나 나는이 작업을 수행 할 수 없습니다
업데이트 1 개
@Alexander Balte의 제안은
그래서이 오류없이 컴파일 IDatabaseInitializer 인터페이스를 사용하여에 저를 넣어 :
Module1Context이 DbContext업데이트 2
을 상속 (210)
public IEnumerable<IDatabaseInitializer<DbContext>> initializers
{
get
{
List<IDatabaseInitializer<Module1Context>> list = new List<IDatabaseInitializer<Module1Context>>();
MigrateDatabaseToLatestVersion<Module1Context, Configuration> init = new MigrateDatabaseToLatestVersion<Module1Context, Configuration>();
list.Add(init);
return list;//Error cannot convert type List<IDatabaseInitializer<Module1Context>> to IEnumerable<IDatabaseInitializer<DbContext>>
}
}
주이 컴파일 :
return list.Cast<IDatabaseInitializer<UpfContext>>();
을 내가 응용 프로그램을 실행할 때 나는이 오류가 발생했습니다 :
System.Data.Entity.MigrateDatabaseToLatestVersion`2[Module1.Models.Module1Context,Module1.Migrations.Configuration]' to type 'System.Data.Entity.IDatabaseInitializer`1[System.Data.Entity.DbContext]'.
'유형 T'와 같은 변수가 있거나 일반 클래스'클래스 Blah'안에 있습니까? –
런타임에 변수가 있습니다. – MrJD
'IDatabaseInitializer'를'IDatabaseInitializer '에 캐스팅하는 것은 불가능합니다. 왜냐하면'IDatabaseInitializer'는 반공 변하기 때문입니다. –