2017-12-21 9 views
0

EF6が更新中にどのように動作するかを理解し始め、AutomaticMigrationsEnabledが実際に何を実行しているかを理解し始めました。新しいUserテーブルを使用してデータベースを更新しようとしています。私は、ユーザーのために新しいエンティティを作成しました:私が取り組んできたプロジェクトでEntire Framework 6でDBSetを追加するときにデータベースメッセージを更新できません

[Table("Users")] 
public class User 
{ 
    <Omitted properties> 
} 

、明示的なマイグレーションを使用することを選択し、任意の自動移行を持っていないされています。だから私は、データベースを作成するために、移行スクリプトを作成しました:

public partial class AddingUserTable : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable("dbo.Users",.... Omitted for clarity 
    } 

    public override void Down() 
    { 
     DropTable("dbo.Users"); 
    } 
} 

そして私はそれへのアクセス権を持っているので、私のコンテキストを更新します。この時点で

public DbSet<User> Users { get; set; } 

私は、「アップデート・データベース」を実行した場合、 NuGetパッケージマネージャコンソール上ではなく、警告と移行スクリプトを適用します。

Applying explicit migration: 201712201003395_AddingUserTable. 
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. 

は、それは私が私のコンテキストにDBSetのユーザーを追加したためであることが判明しました。 DBSetを削除してデータベースを再度更新すると、警告は表示されません。追加すると、警告が再度表示されます。私は、セットを追加してコンテキストを変更し、自動マイグレーションを無効にしているため警告が表示されることを知っていますが、明示的な移行スクリプトで変更を適用済みです。

エンティティフレームワークで既に移行が行われていることがわかり、警告なしで新しいDBSetユーザーを受け入れるためには、何が必要なのですか?

+4

「Add-Migration」をもう一度実行すると、何が表示されますか? – sachin

+0

@sachinどうもありがとうございました!私はそれができないことを知らなかった欠けている変更を加えたことが分かります。どうやら、移行スクリプトとエンティティのプロパティの順序が一致していませんでした。自動生成された移行を使用すると、魅力的な働きをしました。あなたが答えをしてくれたら、私はあなたにそれについて信用を与えることができます。 – evilfish

+0

答えとして解決策を追加しました。 – sachin

答えて

1

移行で考慮していないエンティティに追加の変更があるようです。 「Add-Migration」を実行すると、これらの変更がユーザーの目の前に表示されます。

関連する問題