2016-11-07 1 views
1

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 StartupConfigureServices-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 }); 
     } 
    } 
} 

Antwort

0

Es ist, weil Ihre DbSet Eigenschaften nicht wirklich Eigenschaften sind :) ... sie sind Felder aus. Machen Sie sie Eigenschaften mit einem Getter und Setter und

Verwandte Themen