2013-09-02 11 views
12

私のプロジェクトでは、まずEFコードを使用しています。私は自分のデータモデルに次のコードを持っていますEntity Framework最初に列をnullにできないようにする

[HiddenInput(DisplayValue = false)]   
public DateTime? PasswordDate { get; set; } 

これをnullにすることができないようにするには、「?」を削除しました。パッケージマネージャコンソールからAdd-Migrationコマンドを実行しました。次の移行ファイルが生成されました。

public partial class PasswordDate : DbMigration 
{ 
    public override void Up() 
    { 
     AlterColumn("dbo.CertificateInfoes", "PasswordDate", c => c.DateTime(nullable: false)); 
    } 

    public override void Down() 
    { 
     AlterColumn("dbo.CertificateInfoes", "PasswordDate", c => c.DateTime()); 
    } 
} 

しかし、私は更新-Databaseコマンドを実行すると、私はエラーを取得、次の

Update-Database -SourceMigration 201309020721215_PasswordDate 

を:列 'PasswordDate'、テーブル '' にNULL値を挿入できません。列はNULLを許可しません。 UPDATEに失敗します。 ステートメントが終了しました。

解決策をお勧めします。

答えて

10

これは、その列の値がNULLであることを許可してから、nullを許可しないためです。その後、既存のデータを新しくヌル可能でない列に移行しようとします。これは既に値がNULLであるために中断されます。

2種類の溶液:

1)は、これに値を持っていない項目のデフォルト値を与える)バック
2 NULL可能に変更します。

+0

nullableに戻すことはできません。 2番目のオプションのために私はどのようにデフォルト値を定義できますか?私はそれをマイグレーションファイルで行う必要がありますか、それともデータモデルに追加する必要がありますか? – HBhatia

+0

@HardikBhatia次に、あなたの列にデフォルトの日付値を与えます。そうしないと、ヌルレコードを個別に調べて更新する必要があります。 – mattytommo

+1

私はすでにテーブルを修正して、自分のPasswordDateカラムがデータベース内でヌルでないことを確認しました。 – HBhatia

関連する問題