我一直在阅读并开始使用Entity Framework Code-First。 它在我的本地机器上工作正常(DefaultConnection),但它似乎已停止在我的生产服务器(AppHarbor的SQL Server插件)上工作。
我注意到的一件事是__MigrationHistory文件夹未作为系统表隐藏。
我一直在使用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
初始值设定项?什么是重置迁移并从当前编写的代码启动迁移的更好方法?
答案 0 :(得分:3)
当我想用现有的生产系统实现迁移时,我曾经有过这个问题。您可以使用以下T-SQL命令在__MigrationHistory表上设置is_ms_shipped标志。
EXEC sys.sp_MS_marksystemobject __MigrationHistory
答案 1 :(得分:1)
Code First Migrations只是在寻找一个名为__MigrationHistory的表。它不关心它是否被标记为系统表。
在本指南中,您指的是他们使用的是SQL Server CE,如果您使用的是该提供程序,Code First将永远不会将其标记为系统表。
在您的开发计算机上,您可能正在使用不同版本的SQL Server,因此您将其视为系统表。
在某些数据库中将其标记为系统表的原因只是隐藏它。迁移不需要它是系统表才能工作。
您可以在实体框架团队的Arthur Vickers的this博客文章中阅读更多内容,其中他将展示如何使__MigrationHistory成为Sql Server上的非系统表。
答案 2 :(得分:1)
请参阅Julie Lerman撰写的这篇文章:http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/。这不完全是您所描述的内容,但也许“将迁移历史记录表添加到现有数据库”部分可以帮助您