从数据库中删除数据后,如何使EF Core重新种子化?它将直接在数据库中删除,而不是通过EF核心迁移。
我最新的迁移文件具有以下内容:
migrationBuilder.InsertData(
table: "Person",
columns: new[] { "ID", "Name" },
values: new object[]
{
{ 1, "Tom Watson" }
});
运行Update-Database
后,将创建ID为1的人员,然后有人在SQL Server中运行delete from Person
。此时,我想重新播种数据。运行Update-Database
不会将Person重新插入数据库。
我当前的解决方案是删除我的modelBuilder.Entity<Person>().HasData(...)
代码,创建新的迁移,然后重新添加该代码并创建另一个迁移,最后是Update-Database
。这是一个丑陋的解决方案,会造成不必要的迁移。
有什么想法吗?显然,我可以在数据库上进行插入,但是我想通过EF软件包管理器控制台进行插入,因为我拥有的种子数据比该记录多得多。
答案 0 :(得分:0)
根据Microsoft documentation,您可以使用这样的种子数据。
在这种情况下,每次运行程序时都会检查InitializePersons
,如果数据库中没有记录,则会将新记录再次保存在数据库中。
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var context = services.GetRequiredService<DbContext>();
DbInitializer.InitializePersons(context);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database.");
}
}
host.Run();
}
public static class DbInitializer
{
public static void InitializePersons(DbContext context)
{
context.Database.EnsureCreated();
context.Persons.Add(new Person() { Id = 1, Name = "Tom Watson" });
context.SaveChanges();
}
}