Seed метод не вызывается в update-database, Entity Framework 6 - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующий DbContext класс. Все в EF работает нормально (миграции, отношения и т. Д.), Единственное, что не работает для меня, - это посев. Я пробовал много разных решений, но, похоже, ничего не работает. У кого-нибудь есть идея?

Когда я запускаю update-database, кажется, что он выполняет метод seed, но в базе данных ничего не обновляется.

public class ProgramContext : DbContext
{
    public ProgramContext() : base("ProgramContext")
    {
        Database.SetInitializer<ProgramContext>(new MyDbInit());
    }

    public DbSet<Bin> Bins { get; set; }
    public DbSet<Goal> Goals { get; set; }
    public DbSet<Queue> Queues { get; set; }
    public DbSet<Status> Statuses { get; set; }


    public class MyDbInit : DropCreateDatabaseIfModelChanges<ProgramContext>
    {
        protected override void Seed(ProgramContext context)
        {
            IList<Status> statuses = new List<Status>();
            Status status0 = new Status("WH-RAMP");
            Status status1 = new Status("Transport > Lijn");
            Status status2 = new Status("In lijn");
            Status status3 = new Status("Retour lijn");
            Status status4 = new Status("Transport > WH");
            context.Statuses.Add(status0);

            context.SaveChanges();
            base.Seed(context);
        }
    }
}

Bin.class

public class Bin
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long BinId { get; set; }
    public string Barcode { get; set; }
    public Status Status { get; set; }
    public bool Full { get; set; }

    public Bin(string Barcode, Status Status, bool full)
    {
        this.Barcode = Barcode;
        this.Status = Status;
        this.Full = Full;
    }

}

Status.class

public class Status
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long StatusId { get; set; }
    public string StatusName { get; set; }

    public Status(string StatusName)
    {
        this.StatusName = StatusName;
    }
}

1 Ответ

0 голосов
/ 13 января 2019

Из документации

DropCreateDatabaseIfModelChanges Реализация IDatabaseInitializer, которая будет УДАЛИТЬ, воссоздавать и , при необходимости, повторно заполнять базу данных, только если модель изменилась с момента ее создания .

Это может помочь. Класс Configuration находится в папке миграции.

internal sealed class Configuration : DbMigrationsConfiguration<BookService.Models.BookServiceContext>
{
     protected override void Seed(BookService.Models.BookServiceContext context)
     {
        Status status0 = new Status("WH-RAMP");
        Status status1 = new Status("Transport> Lijn");
        Status status2 = new Status("In lijn");
        Status status3 = new Status("Retour lijn");
        Status status4 = new Status("Transport > WH");
        context.Statuses.Add(status0);
        context.Statuses.Add(status1);
        context.Statuses.Add(status2);
        context.Statuses.Add(status3);
        context.Statuses.Add(status4);

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