每次调试项目时,EF都需要更新DB

时间:2014-05-16 13:36:38

标签: c# entity-framework ef-code-first asp.net-mvc-5

我使用EF6和MVC5 我在项目中使用代码优先。这是我的DbContext:

    public class ProjectServiceDBContext:DbContext
{
    public ProjectServiceIranDBContext()
        : base("ProjectServiceDBContext")
    { }
    public DbSet<Service> Services { get; set; }
    public DbSet<FormPost> FormPosts { get; set; }
    public DbSet<Factory> Factories { get; set; }
    public DbSet<PictureGallery> PictureGallery { get; set; }
    public DbSet<Blog> Blog { get; set; }
    public DbSet<Comment> Comment { get; set; }
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new ServiceMapping());
        modelBuilder.Configurations.Add(new FactoryMapping());
        modelBuilder.Configurations.Add(new FormPostMapping());
        modelBuilder.Configurations.Add(new PictureGalleryMapping());
        modelBuilder.Configurations.Add(new BlogMapping());
        modelBuilder.Configurations.Add(new CommentMapping());
        modelBuilder.Configurations.Add(new UserMapping());
    }
}

在我向Blog模型中添加新字段之前,一切都很好。 我使用迁移来更新我的数据库。但它只适用于一个调试,如果我停止调试并再次开始调试,我会收到更新数据库的错误:

支持&#39; ProjectServiceDBContext&#39;自创建数据库以来,上下文已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

我应该在每次调试之前使用add-migration和update-database

我该怎么办?

我还在我的解决方案中删除了Migration文件夹,并删除了我在数据库中的表格,然后重试并且它不起作用。我也创建了新的DbContext但仍存在此错误。

3 个答案:

答案 0 :(得分:1)

尝试将它放在DbContext的构造函数中:

Database.SetInitializer<ProjectServiceDBContext>(null);

默认情况下,Entity Framework Code-First使用CreateDatabaseIfNotExists初始值设定项。我认为这是造成问题的原因..

答案 1 :(得分:0)

如果更改代码优先的数据库模型,则需要更新数据库以反映该更改。那时您需要添加新的迁移,然后将其应用于应用程序使用的所有数据库。

要应用于生产数据库,您可能希望使用update-database -script生成更改的SQL脚本。

答案 2 :(得分:0)

没有回答为什么您的上下文不断过时,但您可以考虑在开发过程中使用AutomaticMigrations。

请参阅Enabling Migrations

部分