2017-08-05 17 views
0

Visual StudioでASP.NET MVCサンプルアプリケーションを作成しました。 Entity Frameworkで移行しないでデータベースを更新します

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Price { get; set; } 
    public ICollection<Product> Products { get; set; } 
} 

public class Order 
{ 
    public int Id{ get; set; } 
    public Product Product { get; set; } 
    public int ProductId { get; set; } 
    public DateTime RegisterDate { get; set; } 
} 

、その後、私はこのようなメイン DbContextに2 DbSetを追加しました:私は以下のような2つのクラスを追加

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public IDbSet<Product> Products { get; set; } 
    public IDbSet<Order> Orders { get; set; } 

    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

しかし、私はプロジェクトを実行すると、今、私はこのエラーを取得:

データベースが作成されてから 'ApplicationDbContext'コンテキストをサポートするモデルが変更されました

私は、移行(Add-migrationsupdate-database)を使用せずにデータベースを更新する方法があることを知りたがっていますか?

+2

私はあなたが[データベースの初期化]を使用することができます – Rise

+1

DropCreateDatabaseIfModelChangesを探していると思います(http://www.entityframeworktutorial.net/ code-first/database-initialization-strategy-in-code-first.aspx)を参照してください。これらは早期開発に便利であり、独自のシードメソッドを持っています。保存したい非シードデータを取得したら、移行に切り替えることができます。ヌルイニシャライザを使用してもデータベースオブジェクトは作成されません。コードモデルがデータベースと一致する(危険な)と想定します。 –

答えて

2

これを実現するために自動移行を有効にすることができます。このアプローチでは、コードファーストの移行を使用していますが、Add-Migrationコマンドまたはupdate-databaseコマンドを使用する必要はありません。パッケージマネージャコンソールから

ラン有効-移行-EnableAutomaticMigrations次のように最初のConfigurationクラスを生成する:

internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext> 
{ 
    public Configuration() 
    { 
    AutomaticMigrationsEnabled = true; 
    } 

    protected override void Seed(ApplicationDbContext context) 
    { 
    } 
} 

今、あなたは次のように最新のバージョンに移行するデシベルコンテキストのコンストラクタを更新することができ、次のいずれか

public ApplicationDbContext() 
    : base("DefaultConnection", throwIfV1Schema: false) 
{ 
    Database.SetInitializer(
      new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>()); 
    this.Database.Initialize(true); 
} 

またはアプリケーションの最新バージョンに移行以下のように起動:

using (var context = new ApplicationDbContext()) 
{ 
    Database.SetInitializer(
       new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration>()); 
    context.Database.Initialize(true); 
} 
2

データベース構造は、(DBMSユーザーインターフェースなどを介して)問合せ(問合せ)できます。
これを行う場合は、設定チェックを無効にする必要があります。

Database.SetInitializer<YourContext>(null); 

(私は文脈の静的コンストラクタでこれを挿入)

関連する問題