2013-07-29 67 views
20

我正在使用Visual Studio 2012中的MVC4工作,并在表中添加了一列。如何启用迁移以更新MVC4中的数据库?

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

我该怎么办?

我一直在寻找了很多,发现像一些方法:

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

,但不知道如何和在哪里实施这个......曾试图app_start,Global.asax的等等

我发现的是,从nuget直接在控制台中启用迁移。

但我不能做这项工作。

命令我使用:

Enable-Migrations -EnableAutomaticMigrations 

==> consolse说,不止一个背景下被发现。 要启用,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; } 
    } 

} 

回答

26

错误是说你有两个上下文。当您首次使用MVC 4创建项目时,Visual Studio默认为SimpleMembership创建一个上下文(检查Models/Account.cs),或者为UsersContext创建ctrl+f,如果您没有使用SimpleMembership,则可以删除此文件。 删除此背景下后,继续前进,以下内容添加到您的DefaultConnection类:

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

如果启用迁移正确,你也应该有一个文件夹,名为Migrations和里面一个Configuration类,它的构造应该是这样的(如果您想启用自动迁移):

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
} 
+0

FWIW,我需要添加“ base.OnModelCreating(助洗剂);”到您的OnModelCreating覆盖的最后,以便让自动迁移在我的生产服务器上运行(使用EF 6)。 –

1

如果您有小的更改不需要迁移。您可以使用sql脚本将列添加到数据库上的任何表,并添加属性以建模和删除元数据表。 (首先无疑地备份数据库)。

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

2

尝试输入到这个控制台:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection 

Vista.Models.DefaultConnection是你的背景下(从的DbContext继承的类)。

19

命令:

  1. enable-migrations default context
  2. add-migration InitialCreate(生成快照)
  3. add-migration InitialCreate(适用快照)
  4. update-database
  5. update-database -verbose

详细explination将在这里: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html

+2

你能否请[编辑]解释为什么这些命令回答这个问题?仅限代码答案[阻止](http://meta.stackexchange.com/q/148272/274165),因为他们没有教导解决方案。 (这篇文章被至少一个用户标记过,大概是因为他们认为没有解释的答案应该删除。) –

+0

特别感谢了详细描述LINK –

+0

update-database -script生成sql –

相关问题