سؤال

I'm using Code First Migrations and I'm altering my model to add timestamp fields to my tables. I'm trying to add the timetamp fields in my second migration. Here is a sample of what my code looks like

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();            
        }
    }

The generated migration looks like this

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

When I execute the Update-Database command, I get an error message that says "Defaults cannot be created on columns of data type timestamp. Table 'Users', column 'TimeStamp'. Could not create constraint" I moved all the data from the table, but that didn't solve the issue.

How can I go about adding a timestamp field to this migration set?

هل كانت مفيدة؟

المحلول

Use nullable:true. The timestamp column will have null in the column specification but it will be filled anyway.

نصائح أخرى

We just came across this exact problem today. Our solution was to delete the table then to recreate it all via migrations. 2 separate migration scripts.

Obviously not ideal if you want to retain the data but, in our case, this was not an issue.

Would be interesting to hear about a less kludgy solution.

HTH.

FYI this bug was fixed in EF 5.0 beta 2. The best workaround for previous versions is what was already mentioned here: specify nullable:true. Thanks for reporting the issue!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top