如何从头开始删除和重新创建现有的EF Code First数据库

时间:2013-04-16 10:59:59

标签: ef-code-first ef-migrations

我在VS 2012中使用EF Code First和EF 5.我使用PM update-database命令,我有一个简单的种子方法来填充一些带有样本数据的表。

我想删除并重新创建我的x.mdb。更新历史记录似乎不同步。如果我在我的上下文中注释掉了我的所有DBS,update-database运行时没有错误,但在数据库中留下了一些表。由于我在数据库中没有有价值的数据,因此最简单的方法是重置所有内容。

我该如何做到这一点?

12 个答案:

答案 0 :(得分:87)

如果我理解正确的话......

如果你想要start clean

1)手动删除您的数据库 - 无论它在哪里(我假设您已对连接进行排序),或清空它,但更容易/更安全的是将它们全部删除 - 因为有system __MigrationHistory表 - 你也需要删除它。

2)删除所有migration files - 位于Migrations下 - 并命名为数字等 - 全部删除,

3)重建您的项目,包含迁移(以及其他) - 并确保您的项目已设置(配置)以自动构建(有时可能会导致问题 - 但对您来说不太可能) ,

4)再次运行Add-Migration Initial - 然后Update-Database

答案 1 :(得分:49)

如果您使用命令Add-Migration "Name_Of_Migration"以正确的方式创建迁移,那么您可以执行以下操作以获得干净启动(重置,丢失数据,当然):

  1. Update-database -TargetMigration:0

    正常情况下,由于执行了down方法,因此您的数据库为空。

  2. Update-database

    这会将您的数据库重新创建为当前的迁移

答案 2 :(得分:25)

从Package Manager控制台删除,创建和播种的单个Liner:

update-database -TargetMigration:0 | update-database -force

KABOOM。

答案 3 :(得分:11)

对于EntityFrameworkCore,您可以使用以下内容:

Update-Database -Migration 0

这将删除数据库中的所有迁移。 然后你可以使用:

Remove-Migration

删除迁移。 最后,您可以重新创建迁移并将其应用于数据库。

Add-Migration Initialize
Update-Database

在EFCore v2.1.0上测试

答案 4 :(得分:3)

怎么样..

static void Main(string[] args)
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ExampleContext>());  
    // C
    // o
    // d
    // i
    // n
    // g
}

我从Programming Entity Framework: Code First,Pg 28 First Edition中选择了这个。

答案 5 :(得分:1)

如果您按照本教程创建了数据库:https://msdn.microsoft.com/en-au/data/jj193542.aspx

......那么这可能有效:

  1. 删除项目目录中的所有.mdf.ldf文件
  2. 转到View / SQL Server对象资源管理器并从(localdb)\ v11.0子节点中删除数据库。另请参阅https://stackoverflow.com/a/15832184/2279059

答案 6 :(得分:0)

采取以下步骤:

  1. 删除应从上下文中删除的那些对象// Dbset<Item> Items{get;set;} 并在Nuget控制台中运行这些命令
  2. add-migration [contextName]
  3. update-database -verbose
  4. 它将删除Context中不存在但已在数据库中创建的表

答案 7 :(得分:0)

dbctx.Database.EnsureDeleted(); dbctx.Database.EnsureCreated();

答案 8 :(得分:0)

让我帮助您更新此处的答案,因为新用户会发现它很有用。 我相信其目的是删除数据库本身,并使用EF Code First方法重新创建它。 1.使用“ .sln”扩展名在Visual Studio中打开项目。 2.选择服务器资源管理器(通常在左侧) 3.选择“ SQL Server对象资源管理器”。 4.您要删除的数据库将列在任何localDB下。右键单击它,然后选择删除。

答案 9 :(得分:0)

删除数据库或更新现有数据库的方法有很多,只需切换到以前的迁移即可。

dotnet ef database update previousMigraionName    

但是某些数据库具有局限性,例如不允许在创建关系后进行修改,这意味着您不允许特权从ef核心数据库提供程序删除列,但大多数时候允许在ef核心删除数据库中使用。因此,您可以使用drop删除数据库命令 然后您再次使用以前的迁移。

dotnet ef database drop
PMC command 
PM> drop-database

或者您可以手动删除数据库并进行迁移。

答案 10 :(得分:0)

在 ASP.Net Core 5 中使用 EF6 我发现在第一次初始化数据库时这些命令很方便:

Remove-Migration -force; Add-Migration InitialMigration; Update-Database;

它删除最后一次迁移(应该是唯一的),再次创建它,然后刷新数据库。因此,您可以在编辑 Package Management Console 后将这三个命令在一行中键入 DbContext,它会更新 InitialMigration 和数据库。

有点烦人的是,它会连续编译您的项目 3 次,但至少不需要进一步的手动步骤(例如删除迁移文件)。


当您删除实体时,您需要在更新前发出 Remove-Database。所以这行变成了:

Remove-Migration -force; Add-Migration InitialMigration; Remove-Database; Update-Database;

此处有问题:您需要确认删除数据库 + 4 次重建。

答案 11 :(得分:-2)

由于有一天新的EF Core用户将点击这个问题,而我发现最重要的答案在某种程度上不必要地具有破坏性,因此,我将向您展示一种“新鲜”的方法。当心,这将删除您的所有数据。

  1. 删除MS SQL服务器上的所有表。还要删除__EFMigrations表。
  2. 键入dotnet ef database update
  3. EF Core现在将从零开始重新创建数据库,直到您进行最新迁移为止。