使用EF 4.3迁移添加TimeStamps

时间:2012-03-07 08:04:20

标签: .net entity-framework entity-framework-4.3 ef-migrations

我正在使用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'。 无法创建约束“我移动了表中的所有数据,但这并没有解决问题。

如何向此迁移集添加时间戳字段?

3 个答案:

答案 0 :(得分:6)

使用nullable:true。时间戳列在列规范中将具有null,但无论如何它都将被填充。

答案 1 :(得分:0)

我们今天刚遇到这个问题。我们的解决方案是删除表,然后通过迁移重新创建它。 2个单独的迁移脚本。

如果您想保留数据显然不理想,但在我们的情况下,这不是问题。

听说一个不那么愚蠢的解决方案会很有趣。

HTH。

答案 2 :(得分:0)

仅供参考。此错误已在EF 5.0 beta 2中修复。以前版本的最佳解决方法是这里已经提到的:指定nullable:true。感谢您报告此问题!