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();
}
我对如何在 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();
}