MigrationHistory作為實體框架7中DbContext中的實體

.net-core c# ef-migrations entity-framework entity-framework-core

我正在嘗試將(通過實體框架生成)表__EFMigrationsHistory作為實體添加到我的數據庫上下文中:

在此處輸入圖像描述

在實體框架6中,這非常有效,但有沒有人在EntityFramework 7中嘗試過它?

我嘗試的是,只是添加一個新類__EFMigrationsHistory - 但它太簡單了 - there is already a table named __EFMigrationsHistory in the database (謝謝​​...)

然後我讀到了HistoryRow,我將繼承一個類。所以我創建了這個課程

public class MigrationsHistory : HistoryRow 
{ 
    //... constructor etc.
}

開始遷移並且:我有兩個遷移歷史表(但只有原始的表)

所以我讀了並蒐索了實現/繼承的接口和類。我找到了SqlServerHistoryRepository - 看起來不錯。我創建了一個繼承自SqlServerHistoryRepository的新數據庫上下文(就像我在EF6中完成的那樣)。 - 但這不是上下文類,所以我不能在Startup.cs中添加它(就像我使用我的默認applicationcontext一樣)

所以我檢查了DbContext ,可能在某處添加了history-table(比如在EF6中),但沒有任何東西可以將表添加到我的上下文中。

那麼:任何人都已經嘗試將遷移歷史記錄添加到他的上下文中?有人成功嗎?

一般承認的答案

雖然我嘗試使用bricelam的答案但沒有成功使用EF Core 2.0,但在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; }
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow