EF - Code First - значение SQL по умолчанию getdate () выдает ошибку - PullRequest
1 голос
/ 24 июня 2011

У меня есть класс Priority, в котором есть столбец datetime.Этот столбец имеет значение по умолчанию в SQL (после того, как EF сгенерирует базу данных и таблицу, я изменю значение по умолчанию с CreatedDate на getdate()).Поэтому я просто хочу вставить в другие столбцы Приоритет, но EF не позволяет мне и выдает эту ошибку:

System.InvalidOperationException: Модель, поддерживающая контекст ToDoModel, изменилась с момента создания базы данных,Либо удалите / обновите базу данных вручную, либо вызовите Database.SetInitializer с экземпляром IDatabaseInitializer.Например, стратегия 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 ]

2 голосов
/ 01 июля 2011

в методе 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);
    }
2 голосов
/ 24 июня 2011

Вот полезная ссылка, чтобы объяснить, как удалить и воссоздать базу данных, если модель изменится.http://davidhayden.com/blog/dave/archive/2011/04/27/DatabaseInitializersEFCodeFirstDatabaseSetInitializer.aspx

Здесь аналогичный и, возможно, полезный вопрос и ответ здесь, на SO ... HTH Как управлять GetDate () с Entity Framework

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...