如何启用迁移以更新我在MVC4中的数据库?

21

我正在使用Visual Studio 2012 中的MVC4开发项目,并向表中添加了一列。

现在当我想要调试我的项目时,错误提示我使用迁移来更新我的数据库。

我该怎么做?

我已经搜索了很多并找到了一些方法,例如:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  Database.SetInitializer<ResTabelaIndex>(null);
}

但是我不知道如何在哪里实现这个功能... 已经尝试过在app_start, global.asax等位置了...

我发现可以直接从 NuGet 控制台启用迁移。

但我无法使其工作。

我使用的命令:

Enable-Migrations -EnableAutomaticMigrations

==> 控制台显示找到了多个上下文。 要启用,请使用Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection

但我不知道什么是-ContextTypeName,尝试了很多但是无法理解。

My Model Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.Migrations;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Infrastructure;

namespace Vista.Models
{
    public class TabelaIndex
    {
        public int ID { get; set; }
        public string n_empresa { get; set; }
        public string titulo{ get; set; }
        public string url { get; set; }
        public string imagens { get; set; }
    }

    public class DefaultConnection : DbContext
    {
        public DbSet<TabelaIndex> ResTabelaIndex { get; set; }
    }

}
4个回答

28

2
你能否在答案中加入一些解释,说明为什么这些命令可以回答问题?仅有代码的答案是不被鼓励的(参考http://meta.stackexchange.com/q/148272/274165),因为它们不能教授解决方案。(此帖至少被一个用户标记,可能是因为他们认为没有解释的答案应该被删除。) - Nathan Tuggy

26
错误提示您有两个上下文。当您首次使用MVC 4创建项目时,Visual Studio默认为您的SimpleMembership创建上下文(请检查Models/Account.cs),或者使用ctrl+f搜索UsersContext,如果您不使用SimpleMembership,则可以删除此文件。 删除此上下文后,请继续将以下内容添加到您的DefaultConnection类中:
protected override void OnModelCreating(DbModelBuilder builder)
{
   Database.SetInitializer(new MigrateDatabaseToLatestVersion<DefaultConnection,Configuration>());
}
如果您已经正确启用了迁移,那么您应该还有一个名为 Migrations 的文件夹,里面包含一个 Configuration 类。如果您想启用自动迁移,则其构造函数应该像这样:

public Configuration()
{
   AutomaticMigrationsEnabled = true;
}

顺便说一句,我需要在你的OnModelCreating重写末尾添加“base.OnModelCreating(builder);”才能让自动迁移在我的生产服务器上正常工作(使用EF 6)。 - Brent Keller

4

尝试在控制台中输入以下内容:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection

Vista.Models.DefaultConnection是您的上下文(继承自DbContext的类)。


0

如果您只需要进行小的更改而不需要迁移,您可以使用 SQL 脚本向数据库中的任何表添加列,并向模型添加属性并删除元数据表(务必首先备份数据库)。

或者您可以像这样使用迁移:aspnet-mvc-4-entity-framework-scaffolding-and-migrations


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接