3

我正在使用 Code First 迁移,并且正在更改我的模型以将时间戳字段添加到我的表中。我正在尝试在第二次迁移中添加时间戳字段。这是我的代码的示例

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 beta 2 中修复。以前版本的最佳解决方法是这里已经提到的:指定 nullable:true。感谢您报告问题!

于 2012-04-01T21:06:07.153 回答