开发者

EF - Code First - SQL Default Value getdate() gives error

I have a Priority class that has a datetime column. This column has a default value in SQL (after EF generates database and table , I changes default value of CreatedDate to getdate()). So I just want to insert into other columns of Priority but EF does not allow me and gives this error:

System.InvalidOperationException: The model backing the 'ToDoModel' context has changed since the database was created. Either manually delete/update the database, or call Database.SetInitializer with an IDatabaseInitializer instance. For example, the RecreateDatabaseIfModelChanges strategy will automatically delete and recreate the database, and optionally seed it with new data.

public class Priority
{

    public int ID { get; set; }        
    public string Name { get; set; }
    public string Color { get; set; }
    public string Image { get; set; }       
    public DateTime CreatedDate { get; set; }

}

public class ToDoModel:DbContext
{

    public  ToDoModel() : base("ToDoList.ConnectionString") {           
    }

    public DbSet<Priority> Priorites { get; set; }   

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {           

        modelBuilder.Entity<Priority>().MapSingleType().ToTable("tblPriority");
        modelBuilder.Entity<Priority>().HasKey(x => x.ID); 
        modelBuilder.Entity<Priority>().Property(x => x.CreatedDate).StoreGeneratedPattern = StoreGeneratedPattern.Computed;

         base.OnModelCreating(modelBuilder);
    }

}


 [TestMethod]
    public void CanAddPriority()
    {
        var priority = new Priority();
        priority.Col开发者_Python百科or = "red";
        priority.Image = "critical.jpg";
        priority.Name = "Critical";
        db.Priorites.Add(priority);           
        db.SaveChanges();
        Assert.IsTrue(priority.ID > 0);

    }


Here is a helpful link to explain how to drop and recreate the database if the model changes. http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx

Here is a similar, and maybe helpful, question and answer here on SO... HTH How to manage GetDate() with Entity Framework


in OnModelCreating method, I set modelBuilder.IncludeMetadataInDatabase to false and now everything is workink fine.

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Priority>().MapSingleType().ToTable("tblPriority");
        modelBuilder.Entity<Priority>().HasKey(x => x.ID);
        modelBuilder.Entity<Priority>().Property(x => x.CreatedDate).StoreGeneratedPattern = System.Data.Metadata.Edm.StoreGeneratedPattern.Computed;
        modelBuilder.IncludeMetadataInDatabase = false;
        base.OnModelCreating(modelBuilder);
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜