根据构建配置(调试/发布),使用Entity Framework(6+)以不同方式为数据库设定种子的建议方法是什么?
现在我正在使用MigrateDatabaseToLatestVersion初始化程序。在开发过程中,我喜欢在我的数据库中有假数据进行测试。所以我在Configuration类的Seed方法中创建了这个测试数据(首先是启用代码)。但是,每次我通过构建服务器发布产品时,我必须在我的种子方法中注释很多代码,提交,创建发布,然后撤消所有注释以继续使用测试数据进行开发。
我想这不是要走的路。所以我希望你能告诉我正确的方法。
答案 0 :(得分:7)
有很多可能性
使用#if DEBUG
,就像你和Gert Arnold已经谈过的那样:
protected override void Seed(BookService.Models.BookServiceContext context)
{
#if DEBUG
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Test User" },
);
#else
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Productive User" },
);
#endif
}
另一种方法是使用appsettings.json中的配置,也许你想用开发数据设置应用程序,你可以添加像
这样的东西{ "environment" : "development" }
并在种子中检查:
protected override void Seed(BookService.Models.BookServiceContext context)
{
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection();
var config = builder.Build();
if (config["environment"].Equals("development"))
{
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Test User" },
);
}
else if (config["environment"].Equals("producion"))
{
context.Authors.AddOrUpdate(x => x.Id,
new Author() { Id = 1, Name = "Productive User" },
);
}
}
(另见https://docs.asp.net/en/latest/fundamentals/environments.html)
您可以添加环境变量
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
SeedDataForDevelopment();
}
}