How to Enable Migration to update my database in M

2020-02-27 07:16发布

问题:

I'm working on a project using MVC4 in Visual Studio 2012 and have added a column in the table.

Now when I want to debug my project the error says to use the migration to update my database.

What I have to do?

I have been searching a lot and found some methods like:

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

but don't know how and where to implement this... Have tried in app_start, global.asax etc...

What I found was, to enable the migrations directly in the console from the nuget.

But I can't make this work.

Commands I use:

Enable-Migrations -EnableAutomaticMigrations

==> Console says that more than one context was found . To enable use, Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection

But I don't know what is the -ContextTypeName, have tried a lot but couldn't understand.

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; }
    }

}

回答1:

The error is saying that you have two contexts. When you first create a project using MVC 4, Visual Studio creates a context for your SimpleMembership by default (check Models/Account.cs) or do a ctrl+f for UsersContext, you can just delete this file if you are not using SimpleMembership. After removing this context, go ahead and add the following to your DefaultConnection class:

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

If you enabled migrations correctly you should also have a folder called Migrations and inside it a Configuration class, its constructor should look like this (if you want to enable automatic migrations):

public Configuration()
{
   AutomaticMigrationsEnabled = true;
}


回答2:

Commands:

  1. enable-migrations default context
  2. add-migration InitialCreate (for generating snapshot)
  3. add-migration InitialCreate (to apply snapshot)
  4. update-database
  5. update-database -verbose

Detailed explination will here: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html



回答3:

Try typing this into the console:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection

Vista.Models.DefaultConnection is your context (the class that inherits from DbContext).



回答4:

If you have small changes not need migration. You can add column to any table on database with sql script and add property to model and delete metadata table. (back up database firstly no doubt).

Or you can use Migrations like this: aspnet-mvc-4-entity-framework-scaffolding-and-migrations