0

我一直在閱讀和開始使用實體框架Code-First。 它一直在我的本地機器(DefaultConnection)上正常工作,但它似乎已停止在我的生產服務器上工作(來自AppHarbor的SQL Server附加組件)。我的__MigrationHistory表未隱藏。 EF代碼 - 首先被禁用?

我注意到的一件事是__MigrationHistory文件夾不作爲系統表隱藏。

Screenshot

我已經使用了自動遷移的方法所述on AppHarbor's blog
這是我DatabaseContext類:

public class DatabaseContext : DbContext { 
     public DatabaseContext() : base("DefaultConnection") { } 
     public DbSet<UserProfile> UserProfiles { get; set; } 
     public DbSet<Challenge> Challenges { get; set; } 
     public DbSet<Feedback> Feedbacks { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
      Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseContext, Configuration>()); 
     } 
    } 

我想獲得代碼優先的appharbor數據庫的再次合作。有沒有辦法重新啓用它,或者我應該刪除所有生成的遷移類和__MigrationHistory,並通過臨時更改OnModelCreating構造函數以使用DropCreateDatabaseAlways初始化程序來重新創建數據庫?什麼是重置遷移並從當前編寫代碼開始的更好方法?

回答

1

Code First Migrations只是尋找一個名爲__MigrationHistory的表。它並不關心它是否被標記爲系統表。

在本指南中,您指的是他們使用的是SQL Server CE,如果您使用該提供程序,Code First將永遠不會將其標記爲系統表。

在您的開發機器上,您可能使用了不同版本的SQL Server,因此您將其視爲系統表。

它在某些數據庫中被標記爲系統表的原因僅僅是爲了隱藏它。遷移並不要求它是一個系統表才能工作。

您可以從Entity Framework團隊的Arthur Vickers的this博客文章中閱讀更多內容,他在此展示如何使__MigrationHistory成爲Sql Server上的非系統表。

3

我有這個問題而當我想要實現與現有生產系統的遷移時回來。您可以使用以下T-SQL命令在__MigrationHistory表上設置is_ms_shipped標誌。

EXEC sys.sp_MS_marksystemobject __MigrationHistory