2012-02-10 5 views
3

以前のモデルではDataNotationsがありませんでしたが、最近、一部のプロパティで[必須]を適用しました。自動移行が無効になっ であるため、保留中の変更を適用するためにEF 4.1コードファースト - モデルが[必須]属性で更新されました

できません:これが起こると、私の移行コードは次のように、例外をスローし始めます。自動移行を有効にするには、 DbMigrationsConfiguration.AutomaticMigrationsEnabledがtrueに設定されていることを確認します。

移行の明示的な処理が必要であると仮定します。どうか明らかにしてください。

EDIT:AutomaticMigrationsEnabled = trueは私にとってはオプションではありませんが、いくつかの移行スクリプトを使用して可能にする方法は面白いです。

答えて

2

がDbMigrationsConfigurationを拡張Configurationクラスを追加し、trueにAutomaticMigrationsEnabledを設定し、サンプルクラスは、私は

namespace yournamespace 
{ 
    public class YourDataMigrator 
    { 
     public void MigrateData() 
     { 
      DbMigrationsConfiguration configuration=new Configuration(); 
      DbMigrator dbMigrator = new DbMigrator(configuration); 

      try 
      { 
       dbMigrator.Update(); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 

     } 
    } 

} 

を次のようにDbMigratorインスタンスに設定クラスを追加し、この

namespace yournamespace 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Migrations; 
    using System.Linq; 

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


     } 
    } 

ようになります。これがあなたの問題を解決すると思ってください

+0

AutomaticMigrationsEnabled = trueオプションを指定しないで同じ操作を行うには? –

0

私はここに同じページにいるのかどうか分かりませんが、これはあなたのものだと思います尋ねる私はAutomaticMigrationsはfalseに設定されています:

public Configuration() 
{ 
     AutomaticMigrationsEnabled = false; 
} 

を私はこのような設定Postクラスを持っている:

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    [Required] 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public string Tags { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
} 

それは、すでに発生したが、その後、私はタイトルが必要になることがしたい何らかの理由で実現しています。

public class Post 
{ 
    public int Id { get; set; } 
    [Required] 
    public string Title { get; set; } 
    [Required] 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public string Tags { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
} 

私は、変更を行う迅速なビルドを行い、その後、PMコンソールから私が入力します。

アドオンの移行がAddPostAnnotation

これは、このファイルを生成します(名前はあなたが望むものは何でもすることができます) :

public partial class AddPostAnnotations : DbMigration 
{ 
    public override void Up() 
    { 
     AlterColumn("dbo.Posts", "Title", c => c.String(nullable: false)); 
    } 

    public override void Down() 
    { 
     AlterColumn("dbo.Posts", "Title", c => c.String()); 
    } 
} 

これがここにあると、PMコンソールからUpdate-Databaseを実行するだけで、変更が送信されます。

関連する問題