我在 VS 2012 中使用 EF Code First 和 EF 5。我使用 PMupdate-database
命令,并且我有一个简单的种子方法来用示例数据填充一些表。
我想删除并重新创建我的 x.mdb。更新历史似乎不同步。如果我在我的上下文中注释掉我的所有 DBSet,update-database
运行时不会出错,但会在数据库中留下一些表。由于我在数据库中没有有价值的数据,因此重置所有内容似乎是最简单的。
我怎样才能做到这一点?
我在 VS 2012 中使用 EF Code First 和 EF 5。我使用 PMupdate-database
命令,并且我有一个简单的种子方法来用示例数据填充一些表。
我想删除并重新创建我的 x.mdb。更新历史似乎不同步。如果我在我的上下文中注释掉我的所有 DBSet,update-database
运行时不会出错,但会在数据库中留下一些表。由于我在数据库中没有有价值的数据,因此重置所有内容似乎是最简单的。
我怎样才能做到这一点?
如果我理解正确...
如果你想start clean
:
1)手动删除您的数据库-无论它在哪里(我假设您已对连接进行排序),或将其清空,但更容易/更安全的是将其全部删除-因为有system __MigrationHistory
表-您也需要将其删除。
2)删除所有migration files
- 下Migrations
- 并命名为数字等 - 将它们全部删除,
3)重建包含迁移(和其余部分)的项目 - 并确保您的项目设置(配置)以自动构建(有时可能会导致问题 - 但不太可能),
4)Add-Migration Initial
再次运行 - 然后Update-Database
如果您使用该命令以正确的方式创建迁移,Add-Migration "Name_Of_Migration"
那么您可以执行以下操作以获得一个干净的开始(重置,当然会丢失数据):
Update-database -TargetMigration:0
通常,由于执行了 down 方法,您的数据库现在是空的。
Update-database
这会将您的数据库重新创建到您当前的迁移中
对于 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
从包管理器控制台删除、创建和播种的单行:
update-database -TargetMigration:0 | update-database -force
卡布姆。
怎么样 ..
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 中选择了这个。
删除数据库或更新现有数据库的方法有很多,只需切换到以前的迁移即可。
dotnet ef database update previousMigraionName
但是某些数据库有限制,例如在创建关系后不允许修改,这意味着您没有权限从 ef 核心数据库提供程序中删除列,但大多数时间在 ef 核心删除数据库中是允许的。所以您可以使用 drop 命令删除数据库,然后您再次使用以前的迁移。
dotnet ef database drop
PMC command
PM> drop-database
或者您可以手动删除数据库并进行迁移。
如果您按照本教程创建了数据库:https ://msdn.microsoft.com/en-au/data/jj193542.aspx
...那么这可能会起作用:
.mdf
和.ldf
文件dbctx.Database.EnsureDeleted(); dbctx.Database.EnsureCreated();
将 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 次重建。
我正在使用 .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();
}
}
}
您至少应该进行初始迁移才能使其正常工作。
采取以下步骤:
Dbset<Item> Items{get;set;}
并在 Nuget 控制台中运行这些命令它将删除上下文中不存在但已在数据库中创建的表
让我在这里帮助更新答案,因为新用户会发现它很有用。我相信目的是删除数据库本身并使用 EF Code First 方法重新创建它。1.使用“.sln”扩展名在 Visual Studio 中打开您的项目。2.选择Server Explorer(经常在左边) 3.选择SQL Server Object Explorer。4.您要删除的数据库将列在任何localDB下。右键单击它并选择删除。
由于新的 EF Core 用户有一天会点击这个问题,而且我发现最重要的答案有些不必要的破坏性,因此我将向您展示一种“重新开始”的方法。请注意,这会删除您的所有数据。
dotnet ef database update