Ошибка с DbSeed-Migration в WebApiBackend (netcore2)

У меня есть бэкэнд WebApi со следующей структурой:

В библиотеке базы данных есть файл CSV. В классе DbSeeder.cs я хочу заполнить свою базу данных.

Структура CSV выглядит так:

DayOfWeek;Starter;MainCourse;Dessert;Price
Montag;Tagessuppe;Kaiserschmarrn mit Apfelmus;;4.50
Dienstag;;Cordon bleu mit Kartoffeln und Salat;Dessert;4.20
Mittwoch;Tagessuppe;Geschnetzeltes mit Erbsenreis;;4.90
Donnerstag;;Burger mit Wedges;Dessert;6.30
Freitag;Tagessuppe;Eiernockerl mit Salat;;3.90

Как видите, не каждое поле в этом файле имеет значение, но проблема не в этом. Я думаю, настоящая проблема в моем классе DbSeeder.cs.

public static class DbSeeder
    {
        public static FoodOrderBackendContext Seed(FoodOrderBackendContext db)
        {
            db.Meals.AddRange(
                File.ReadAllLines(@"C:\Users\floha\Desktop\Essensbestellungen\Backend\FoodOrderBackend\FoodOrderBackendDb\meals.csv")
                .Select(x =>
                {
                    StringBuilder builder = new StringBuilder(x);
                    builder.Replace(";;", ";-;");
                    string newX = builder.ToString();
                    var s = newX.Split(';');
                    string weekday = s[0];
                    int weekNr = 0;
                    switch (weekday)
                    {
                        case "Montag":
                            weekNr = 1;
                            break;
                        case "Dienstag":
                            weekNr = 2;
                            break;
                        case "Mittwoch":
                            weekNr = 3;
                            break;
                        case "Donnerstag":
                            weekNr = 4;
                            break;
                        case "Freitag":
                            weekNr = 5;
                            break;
                        case "Samstag":
                            weekNr = 6;
                            break;
                        case "Sonntag":
                            weekNr = 7;
                            break;
                    }
                    return new Meal()
                    {
                       Weekday = weekNr,
                       Starter = s[1],
                       MainCourse = s[2],
                       Dessert= s[3],
                       Price=float.Parse(s[3])
                    };
                })
                .AsEnumerable());
            db.SaveChanges();
            return null;
        }
    }

Вот также фрагмент кода моего класса Meal.cs:

public partial class Meal
    {
        public Meal()
        {
            Orders = new HashSet<Order>();
        }

        public int MealId { get; set; }
        public int Weekday { get; set; }
        public string Starter { get; set; }
        public string MainCourse { get; set; }
        public string Dessert { get; set; }
        public float Price { get; set; }

        public ICollection<Order> Orders { get; set; }
    }

С участием Add-Migration Seed Я создал миграцию, в которой хочу вызвать этот метод DbSeeder.Seed(db).

public partial class Seed : Migration
    {
        FoodOrderBackendContext db;
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            DbSeeder.Seed(db);
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {

        }
    }

Теперь, когда я хочу выполнить команду Update-Database, появляется следующая ошибка: Кто-нибудь из вас знает, что может означать ошибка? Или решение.

ErrorText:

Версия инструментов EF Core "2.1.1-rtm-30846" старше, чем у среды выполнения "2.1.11-servicing-32099". Обновите инструменты для получения последних функций и исправлений ошибок. Применение миграции '20200507182207_Seed'. System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта. в FoodOrderBackendDb.DbSeeder.Seed(FoodOrderBackendContext db) в C:\Users\floha\Desktop\Essensbestellungen\Backend\FoodOrderBackend\FoodOrderBackendDb\DbSeeder.cs: строка 13 в FoodOrderBackend.Migration: MigrationUsers\floha\Desktop\Essensbestellungen\Backend\FoodOrderBackend\FoodOrderBackendDb\Migrations\20200507182207_Seed.cs: строка 10 в Microsoft.EntityFrameworkCore.Migrations.Migration.BuildOperations(Action1 buildAction) at Microsoft.EntityFrameworkCore.Migrations.Migration.<.ctor>b__4_1() at Microsoft.EntityFrameworkCore.Internal.LazyRef1.get_Value() в Microsoft.EntityFrameworkCore.Migrations.Migration.get_UpOperations() в Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateUpSql(миграция с миграцией) в Microsoft.EntityFrameworkCore.Migrations.Internal.C___C___C___Migrator.) в Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration) в Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType) в Microsoft.EntityFrameworkCore.Design.OperationClassDesign.OperationClassDateDesign.OperationExecutor_1.. <. ctor>b__0() в Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Действие действия) Ссылка на объект не установлена ​​на экземпляр объекта.

0 ответов

Другие вопросы по тегам