내 데이터베이스 컨텍스트 엔티티로 (엔티티 프레임 워크에 의해 생성 된) 테이블 __EFMigrationsHistory
를 얻으려고합니다 :
Entity Framework 6에서이 작업은 환상적 이었지만 EntityFramework 7에서 시도한 사람이 있습니까?
내가 시도한 것은 새로운 클래스 __EFMigrationsHistory
추가하는 것입니다.하지만 너무 쉬울 there is already a table named __EFMigrationsHistory in the database
(감사합니다 ...).
그런 다음 HistoryRow에 대해 읽었습니다. 나는 수업을 상속 받게됩니다. 그래서 나는 수업을 만들었다.
public class MigrationsHistory : HistoryRow
{
//... constructor etc.
}
이전을 시작 : 2 개의 마이그레이션 기록 테이블이 있습니다 (단 원래 테이블 만 작동)
그래서 읽고 구현할 인터페이스와 클래스를 검색했습니다. SqlServerHistoryRepository
발견되었습니다. SqlServerHistoryRepository
에서 상속받은 새 데이터베이스 컨텍스트를 만들었습니다 (EF6에서 처리 한 것처럼). -하지만 이것은 컨텍스트 클래스가 아니므로 Startup.cs에 추가 할 수 없습니다 (기본 applicationcontext와 동일).
그래서 DbContext
아마 어딘가에 (예 : EF6)에서 역사 - 테이블을 추가하지만, 내 컨텍스트에 테이블을 추가하기위한 아무것도 없다.
그럼 : 누구든지 자신의 컨텍스트에 이미 이전 기록을 추가하려고 했습니까? 누구든지 성공 했습니까?
EF Core 2.0을 사용하지 않은 bricelam의 답변을 실험 해본 결과, Microsoft.EntityFrameworkCore 에는 방법이 있습니다.
// .NET Core 1.0 + Platform Extensions
// Microsoft.EntityFrameworkCore.Relational, Version=1.1.0.0, PublicKeyToken=adb9793829ddae60
namespace Microsoft.EntityFrameworkCore
{
public static class RelationalDatabaseFacadeExtensions
{
public static IEnumerable<string> GetAppliedMigrations(this DatabaseFacade databaseFacade);
}
}
그것을 다음과 같이 호출하십시오.
var dbcontext = new DbContext();
IEnumerable<string> history = dbcontext.Database.GetAppliedMigrations();
이름으로 테이블에 매핑 (실수로 호출하여 예, 당신은 단지 당신이 그것을 다시 만들려고하지 않도록해야합니다 (쉽게 것입니다) 작동합니다 DbContext.Database.EnsureCreate()
)
class MyContext : DbContext
{
public DbSet<AppliedMigration> AppliedMigrations { get; set; }
}
[Table("__EFMigrationsHistory")]
class AppliedMigration
{
[Column("MigrationId")]
public string Id { get; set; }
[Column("ProductVersion")]
public string EFVersion { get; set; }
}