我正在使用Code First Migrations,我正在改变我的模型,以便为我的表添加时间戳字段。我正在尝试在第二次迁移中添加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命令时,收到一条错误消息,指出“无法在数据类型时间戳的列上创建默认值。表'用户',列'TimeStamp'。 无法创建约束“我移动了表中的所有数据,但这并没有解决问题。
如何向此迁移集添加时间戳字段?
答案 0 :(得分:6)
使用nullable:true
。时间戳列在列规范中将具有null
,但无论如何它都将被填充。
答案 1 :(得分:0)
我们今天刚遇到这个问题。我们的解决方案是删除表,然后通过迁移重新创建它。 2个单独的迁移脚本。
如果您想保留数据显然不理想,但在我们的情况下,这不是问题。
听说一个不那么愚蠢的解决方案会很有趣。
HTH。
答案 2 :(得分:0)
仅供参考。此错误已在EF 5.0 beta 2中修复。以前版本的最佳解决方法是这里已经提到的:指定nullable:true。感谢您报告此问题!