我在 EF Core 2.1 中使用新的数据播种方式,我只想为开发环境播种数据。
最初我试过这个:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != EnvironmentName.Development)
{
return;
}
modelBuilder.Entity<Customer>().HasData(new Customer { ... });
}
但是,我注意到生成的迁移总是会将客户插入到数据库中。
有没有办法在每个环境的基础上限制数据种子?
最佳答案
这有点老了,但我所做的是创建扩展方法以从 Startup.cs
调用,并根据数据库是否存在来为它做种子。我还将那个电话包装在一个环境中
如果数据库已经存在,则不会进行数据库播种,但是,我相信这种行为很好,因为数据库已经存在,您很可能不在开发环境中。
public static class Extensions
{
public static void UseDbSeeding(this IApplicationBuilder app)
{
var factory = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>();
using var serviceScope = factory.CreateScope();
var context = serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
if(context.Database.EnsureCreated()) // false when db already exists
{
// Seed here
context.SaveChanges();
}
}
}
来自Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDbSeeding();
}
}
关于c# - Entity Framework Core 2.1 中特定环境的播种数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51026744/