实体框架-EF-代码优先-SQL默认值getdate()给出错误



我有一个优先级类,它有一个日期时间列。该列在SQL中有一个默认值(EF生成数据库和表后,我将默认值CreatedDate更改为getdate())。所以我只想插入优先级的其他列,但EF不允许我,并给出了这个错误:

System.InvalidOperationException:自创建数据库以来,支持"ToDoModel"上下文的模型已更改。手动删除/更新数据库,或使用IDatabaseInitializer实例调用database.SetInitializer。例如,RecreaeDatabaseIfModelChanges策略将自动删除和重新创建数据库,并可选择为其添加新数据。

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.Color = "red";
        priority.Image = "critical.jpg";
        priority.Name = "Critical";
        db.Priorites.Add(priority);           
        db.SaveChanges();
        Assert.IsTrue(priority.ID > 0);
    }

这里有一个有用的链接,可以解释如果模型发生变化,如何删除和重新创建数据库。http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx

这里有一个类似的,也许有帮助的问题和答案在这里SO…HTH如何使用实体框架管理GetDate()

OnModelCreating方法中,我将modelBuilder.IncludeMetadataInDatabase设置为false,现在一切都很好。

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

最新更新