Я пытаюсь заполнить мои данные при первом запуске, используя функцию конфигурации в Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
.
.
app.SeedData();
}
app.SeedData();
, затем вызывает функцию SeedData в DataSeeder.cs для инициализацииApplicatonDbContext.
public static class DataSeeder
{
public static async void SeedData(this IApplicationBuilder app)
{
var dbManager = app.ApplicationServices.GetService<ApplicationDbContext>();
dbManager.Database.Migrate();
Brand Addiction;
Addiction = new Brand()
{
BrandName = "Addiction"
};
dbManager.Brands.Add(Addiction);
dbManager.SaveChanges();
return;
}
}
Когда код пытается запустить dbManager.Database.Migrate();
, он генерирует исключение NullReferenceException, сообщающее, что dbManager имеет значение null.Я попытался поместить точку останова в первую строку ApplicationDbContext.cs, похоже, он не запускается.Любые способы, как это исправить?
Я видел, как другие использовали app.ApplicationServices.GetRequiredService<ApplicationDbContext>();
вместо app.ApplicationServices.GetService<ApplicationDbContext>();
.Я попытался изменить это и вместо этого получил InvalidOperationException, сказав: «Не зарегистрирован сервис для типа« BrandTest.Data.ApplicationDbContext ».»
Мой код ApplicationDbContext.cs, кстати
using BrandTest.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BrandTest.Data
{
public class ApplicationDbContext : DbContext
{
public DbSet<Brand> Brands { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=DESKTOP-ABCDE\SQLEXPRESS;Database=PetStoreDB;Trusted_Connection=True;MultipleActiveResultSets=True");
base.OnConfiguring(optionsBuilder);
}