3

Code First Migrations を使用しており、モデルを変更してテーブルにタイムスタンプ フィールドを追加しています。2 回目の移行で timetamp フィールドを追加しようとしています。ここに私のコードがどのように見えるかのサンプルがあります

public class User {
    public int UserId { get; set; }
    public string UserName { get; set; }      
    public byte[] TimeStamp { get; set; }
}

 public class UserModelConfiguration: EntityTypeConfiguration<User> {
        public UserModelConfiguration() {
            Property(p => p.UserName).IsRequired().HasMaxLength(250);
            Property(p => p.TimeStamp).IsRowVersion();            
        }
    }

生成された移行は次のようになります

public override void Up()
        {                
            AddColumn("Users", "TimeStamp", c => c.Binary(nullable: false, fixedLength: true, timestamp: true, storeType: "rowversion"));
        }

Update-Database コマンドを実行すると、 「データ型タイムスタンプの列ではデフォルトを作成できません。テーブル 'Users'、列 'TimeStamp'。制約を作成できませんでした」というエラー メッセージが表示されます。表ですが、それでも問題は解決しませんでした。

この移行セットにタイムスタンプ フィールドを追加するにはどうすればよいですか?

4

3 に答える 3

6

を使用しnullable:trueます。タイムスタンプ列はnull列の仕様に含まれますが、とにかく入力されます。

于 2012-03-07T14:48:04.863 に答える
0

今日、まさにこの問題に遭遇しました。私たちの解決策は、テーブルを削除してから、移行によってすべて再作成することでした。2 つの個別の移行スクリプト。

データを保持したい場合は明らかに理想的ではありませんが、私たちの場合、これは問題ではありませんでした.

より厄介な解決策について聞くのは興味深いでしょう。

HTH。

于 2012-03-07T13:22:48.103 に答える
0

参考までに、このバグは EF 5.0 ベータ 2 で修正されました。以前のバージョンの最善の回避策は、ここで既に説明したことです: nullable:true を指定します。問題を報告していただきありがとうございます。

于 2012-04-01T21:06:07.153 に答える