Visual Studio 2012でMVC4を使用するプロジェクトに取り組んでおり、表に列を追加しました。
プロジェクトをデバッグするときに、移行を使用してデータベースを更新するようにエラーが表示されるようになりました。
私がしなければならないこと?
私は多くの検索を行ってきましたが、次のような方法を見つけました。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<ResTabelaIndex>(null);
}
しかし、これを実装する方法と場所がわからない... app_start
、global.asax
etc ...
私が見つけたのは、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; }
}
}
エラーは、2つのコンテキストがあることを示しています。 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;
}
コマンド:
enable-migrations default context
add-migration InitialCreate
(スナップショットの生成用)add-migration InitialCreate
(スナップショットを適用するため)update-database
update-database -verbose
これをコンソールに入力してみてください。
Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection
Vista.Models.DefaultConnectionは、コンテキスト(DbContextを継承するクラス)です。
小さな変更がある場合、移行する必要はありません。 sqlスクリプトを使用してデータベース上の任意のテーブルに列を追加し、プロパティをモデルに追加してメタデータテーブルを削除できます。 (最初に間違いなくデータベースをバックアップします)。
または、次のような移行を使用できます。 aspnet-mvc-4-entity-framework-scaffolding-and-migrations