【发布时间】:2015-07-24 14:10:17
【问题描述】:
是否有合适的方法来播种数据库?
我似乎找不到任何文件来完成这项工作。
【问题讨论】:
-
看一下测试代码,看看是怎么做到的
是否有合适的方法来播种数据库?
我似乎找不到任何文件来完成这项工作。
【问题讨论】:
目前,您必须手动播种(但将来会有 talk of a high level API 用于此)。
您可以在 Startup 类的 Configure 方法中这样做(假设您使用的是 ASP.NET 5):
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory logger)
{
using (var context = (MyContext) app.ApplicationServices.GetService<MyContext>())
{
if (env.IsDevelopment())
{
//Add seed code here
context.MyEntity.Add(new MyEntity{ Id = 1 });
//etc
context.SaveChanges();
}
}
}
}
您还可以查看 Music Store 示例应用程序,它的 SampleData 类更复杂且更健壮。
【讨论】:
global.asax 中的Application_Start 方法或类似方法。
在Startup类的public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)函数中,添加这个
if (env.IsDevelopment())
{
app.UseBrowserLink();
SeedData.InitializeDatabaseAsync(app.ApplicationServices).Wait();
}
以及SeedData.InitializeDatabaseAsync的实现如下
public class SeedData
{
public static async Task InitializeDatabaseAsync(IServiceProvider serviceProvider,
bool createUsers = true)
{
using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var db = serviceScope.ServiceProvider.GetService<SampleDbContext>();
await db.Database.MigrateAsync();
using (db)
{
await InsertTestData(db);
}
}
}
private static async Task InsertTestData(SampleDbContextdbContext)
{
// seed data here
}
}
以上内容的参考here。希望对您有所帮助。
【讨论】: