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

时间:2011-06-24 13:56:36

标签: entity-framework code-first

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

  

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

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

    }

2 个答案:

答案 0 :(得分:2)

这是一个有用的链接,用于解释如何在模型更改时删除并重新创建数据库。 http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx

这里有一个类似的,也许是有用的问题和答案,关于SO ... HTH How to manage GetDate() with Entity Framework

答案 1 :(得分:2)

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);
    }
相关问题