我的项目中有3个程序集:MyApp.Core
,MyApp.Infrastructure
,MyApp.Web
。
MyApp.Core
包含数据库模型/实体,MyApp.Infrastructure
包含数据库上下文和迁移,MyApp.Web
包含Startup
类。
数据库是使用代码第一个EF创建的,它存在(我检查过)。
我已在Startup
班级ConfigureServices
方法中注册了数据库上下文:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<MyAppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<Employee, IdentityRole>()
.AddEntityFrameworkStores<KinderGardenDbContext>()
.AddDefaultTokenProviders();
...
}
我想使用静态方法MyApp.Infrastructure.MyAppContextSeed.Seed()
为我的数据库设定种子。所以我在Configure
方法的末尾添加了方法:
...
MyAppDbContextSeed.Seed(app.ApplicationServices).Wait();
}
在上面的方法中,我解析了数据库上下文:
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())
{
...
}
}
}
在上面的if
声明中,Companies
为空。
此外,这是我的数据库上下文类:
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 });
}
}
}
答案 0 :(得分:0)
这是因为您的DbSet属性实际上不是属性:) ...它们是字段。使用getter和setter以及
创建属性