Ich habe 3 Baugruppen in meinem Projekt: MyApp.Core
, MyApp.Infrastructure
, MyApp.Web
.Gelöster Datenbankkontext ergibt Null DbSet (s)
MyApp.Core
enthält Datenbankmodelle/Entitäten, MyApp.Infrastructure
den Datenbankkontext und Migrationen enthält, und MyApp.Web
enthält die Startup
Klasse.
Die Datenbank wurde mit Code zuerst EF erstellt und es existiert (ich überprüfte).
Ich habe den Datenbankkontext in meiner Startup
ConfigureServices
-Methode der Klasse registriert:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<MyAppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<Employee, IdentityRole>()
.AddEntityFrameworkStores<KinderGardenDbContext>()
.AddDefaultTokenProviders();
...
}
Ich mag MyApp.Infrastructure.MyAppContextSeed.Seed()
meine Datenbank mit meiner statischen Methode auf Saatgut. So füge ich das Verfahren am Ende der Configure
Methode:
...
MyAppDbContextSeed.Seed(app.ApplicationServices).Wait();
}
In dem obigen Verfahren kann ich die Datenbank Kontext lösen:
public static async Task Seed(IServiceProvider services)
{
...
using (var context = services.GetRequiredService<MyAppDbContext>())
using (var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>())
using (var userManager = services.GetRequiredService<UserManager<Employee>>())
{
if (!await context.Companies.AnyAsync())
{
...
}
}
}
In der if
Erklärung oben ist Companies
null.
Auch hier ist meine Datenbank Kontextklasse:
namespace MyApp.Infrastructure.EntityFramework
{
public class MyAppDbContext : IdentityDbContext<Employee>
{
public DbSet<Company> Companies;
public DbSet<Person> Persons;
public DbSet<Employee> Employees;
public DbSet<KeyCard> KeyCards;
public DbSet<KeyRequestForm> KeyRequestForms;
public KinderGardenDbContext(DbContextOptions<KinderGardenDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Company>().ToTable("Company");
builder.Entity<Person>().ToTable("Person");
builder.Entity<Employee>().ToTable("Employee");
builder.Entity<KeyCard>().ToTable("KeyCard");
builder.Entity<KeyRequestForm>().ToTable("KeyRequestForm");
builder.Entity<KeyCardKeyRequestForm>().ToTable("KeyCardKeyRequestForm");
builder.Entity<KeyCardKeyRequestForm>()
.HasKey(c => new { c.KeyCardId, c.KeyRequestFormId });
}
}
}