98

我在 VS 2012 中使用 EF Code First 和 EF 5。我使用 PMupdate-database命令,并且我有一个简单的种子方法来用示例数据填充一些表。

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

我怎样才能做到这一点?

4

13 回答 13

131

如果我理解正确...

如果你想start clean

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

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

3)重建包含迁移(和其余部分)的项目 - 并确保您的项目设置(配置)以自动构建(有时可能会导致问题 - 但不太可能),

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

于 2013-04-18T12:05:41.817 回答
65

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

  1. Update-database -TargetMigration:0

    通常,由于执行了 down 方法,您的数据库现在是空的。

  2. Update-database

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

于 2014-02-25T10:52:48.123 回答
49

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

Update-Database -Migration 0

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

Remove-Migration

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

Add-Migration Initialize
Update-Database

在 EFCore v2.1.0 上测试

对于 dotnet ef CLI 工具也是如此:

dotnet ef database update 0 [ --context dbcontextname ]
dotnet ef migrations add Initialize
dotnet ef database update
于 2018-06-02T13:44:41.130 回答
33

从包管理器控制台删除、创建和播种的单行:

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

卡布姆。

于 2015-09-27T14:14:29.573 回答
5

怎么样 ..

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 中选择了这个。

于 2015-04-09T07:15:29.770 回答
2

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

dotnet ef database update previousMigraionName    

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

dotnet ef database drop
PMC command 
PM> drop-database

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

于 2020-11-14T17:45:51.537 回答
1

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

...那么这可能会起作用:

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

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

于 2019-06-12T16:02:35.360 回答
1

将 EF6 与 ASP.Net Core 5 一起使用,我发现在数据库的第一次初始化期间这些命令很方便:

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

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

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


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

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

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

于 2021-06-19T14:08:40.313 回答
1

我正在使用 .net Core 6,此代码直接从 Program.cs 中删除

using Microsoft.EntityFrameworkCore;

namespace RandomProjectName
{
    public class Program
    {
        public static async Task<int> Main(string[] args)
        {
            var connectionString = "Server=YourServerName;Database=YourDatabaseName;Integrated Security=True;";
            
            var optionsBuilder = new DbContextOptionsBuilder<YourDataContext>();
            optionsBuilder.UseSqlServer(connectionString);
            
            var db = new YourDataContext(optionsBuilder.Options);
            db.Database.EnsureDeleted();
            db.Database.Migrate();
        }
    }
}

您至少应该进行初始迁移才能使其正常工作。

于 2022-02-17T15:34:04.697 回答
0

采取以下步骤:

  1. 删除那些应该从上下文中删除的对象 //Dbset<Item> Items{get;set;} 并在 Nuget 控制台中运行这些命令
  2. 添加迁移 [contextName]
  3. 更新数据库-详细

它将删除上下文中不存在但已在数据库中创建的表

于 2017-01-06T12:58:25.850 回答
0

让我在这里帮助更新答案,因为新用户会发现它很有用。我相信目的是删除数据库本身并使用 EF Code First 方法重新创建它。1.使用“.sln”扩展名在 Visual Studio 中打开您的项目。2.选择Server Explorer(经常在左边) 3.选择SQL Server Object Explorer。4.您要删除的数据库将列在任何localDB下。右键单击它并选择删除。

于 2020-08-25T13:51:32.733 回答
-2

由于新的 EF Core 用户有一天会点击这个问题,而且我发现最重要的答案有些不必要的破坏性,因此我将向您展示一种“重新开始”的方法。请注意,这会删除您的所有数据。

  1. 删除 MS SQL 服务器上的所有表。同时删除 __EFMigrations 表。
  2. 类型dotnet ef database update
  3. EF Core 现在将从零开始重新创建数据库,直到您最近一次迁移。
于 2020-05-28T16:11:57.203 回答