Как включить миграцию для обновления моей базы данных в MVC4?
Я работаю над проектом с использованием MVC4 в Visual Studio 2012 и добавил столбец в таблице.
Теперь, когда я хочу отлаживать проект, в этой ошибке говорится, что для миграции моей базы данных используется переход.
Что я должен делать?
Я много искал и нашел несколько способов:
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; }
}
}
Ответы
Ответ 1
Ошибка говорит о том, что у вас есть два контекста. Когда вы сначала создаете проект с использованием 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;
}
Ответ 2
Команды
-
enable-migrations default context
-
add-migration InitialCreate
(для создания моментального снимка)
-
add-migration InitialCreate
(для применения моментального снимка)
-
update-database
-
update-database -verbose
Подробное объяснение будет здесь:
http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html
Ответ 3
Попробуйте ввести это в консоль:
Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection
Vista.Models.DefaultConnection - это ваш контекст (класс, который наследуется от DbContext).
Ответ 4
Если у вас небольшие изменения, вам не нужна миграция. Вы можете добавить столбец в любую таблицу в базе данных с помощью sql script и добавить свойство моделировать и удалять таблицу метаданных. (резервная база данных, во-первых, без сомнения).
Или вы можете использовать Migrations следующим образом: aspnet-mvc-4-entity-framework-scaffolding-and-migrations