问题
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:
enable-migrations default context
add-migration InitialCreate
(for generating snapshot)add-migration InitialCreate
(to apply snapshot)update-database
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
来源:https://stackoverflow.com/questions/17922945/how-to-enable-migration-to-update-my-database-in-mvc4