Entity Framework Core - 使用内存数据库并填充虚假数据

Entity Framework Core - Use In Memory Database and fill with fake data

我对如何在 Startup.cs 中添加 DBContext 感到困惑。我有以下不起作用的(但我终于能够编译它)。我怎样才能将其减少到使用我定义的 options 并在我的 using 语句中使用它。显然我不想定义两个不同的数据库,但这是我编译它的唯一方法。如果我以错误的方式处理这个问题,请告诉我。这是 Startup.cs

ConfigureServices() 的示例
var options = new DbContextOptionsBuilder<ApiContext>().UseInMemoryDatabase(databaseName: "Appointments");
services.AddDbContext<ApiContext>(options => options.UseInMemoryDatabase(databaseName: "Test"));
using (var context = new ApiContext(options.Options))
{
     //Create Fake Data
     DataGenerator.GenerateData(context);
}

不要尝试在 ConfigureServices 期间创建上下文。还有其他命令行工具,例如 ef core,它们会出于其他原因创建您的服务提供者。

相反,我建议您创建一个 IHostedService,创建一个服务范围,然后执行初始化。

如果你想在内存数据库中添加假数据,你可以按照下面的方法做。

在你的startup中:

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApiContext>(opt => opt.UseInMemoryDatabase());
        //...
    }
    //To add data to the in-memory database when the application starts up, add some code to the Configure method:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        //...
        var scopeeee = app.ApplicationServices.CreateScope();
        var context = scopeeee.ServiceProvider.GetRequiredService<ApiContext>();
        AddTestData(context);
        //...
    }

    private static void AddTestData(ApiContext context)
    {
        //add fake data
        //.....
        context.Add(model);
        context.SaveChanges();
    }