Ошибка с 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.LazyRef
1.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(Действие действия) Ссылка на объект не установлена на экземпляр объекта.