我在EF 2012中使用EF代码优先EF 5。我使用PM update-database
命令,我有一个简单的种子方法来填充一些表格样本数据。如何从头开始删除并重新创建一个现有的EF代码优先数据库
我想删除并重新创建我的x.mdb。更新历史记录似乎不同步。如果我在我的上下文中注释掉所有我的DBSets,则update-database
将不会发生错误,但会在数据库中留下一些表。因为我在数据库中没有有价值的数据,所以似乎最简单的就是重置所有的东西。
我该如何做到这一点?
我在EF 2012中使用EF代码优先EF 5。我使用PM update-database
命令,我有一个简单的种子方法来填充一些表格样本数据。如何从头开始删除并重新创建一个现有的EF代码优先数据库
我想删除并重新创建我的x.mdb。更新历史记录似乎不同步。如果我在我的上下文中注释掉所有我的DBSets,则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
这将重新创建你的数据库到当前的迁移
Update-database -TargetMigration:0需要-f(强制)标志才能删除所有内容,否则会说可能会丢失数据。命令应该是: 更新数据库-TargetMigration:0 -f – Tascalator
@Tascalator,我只是试过这个没有-f,并没有关于可能的数据丢失的警告。使用EF 6.1.2,表中有数据被删除。 – jk7
EF Core中的等效语法只是'Update-Database 0'。请注意,对于OP的情况,这是一个值得怀疑的情况,其中*“更新历史记录似乎不同步”*;这种方法通过对迄今为止应用于数据库的每次迁移运行“向下”迁移来实现,所以如果您删除了以前应用的迁移,那么这将失败(并且如果您已经*修改了* a在应用之后迁移)。 [接受的答案](https://stackoverflow.com/a/16082497/1709587)可能会更好,因为无论您的迁移有多糟糕,它都可以工作。 –
如何..
static void Main(string[] args)
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ExampleContext>());
// C
// o
// d
// i
// n
// g
}
我从Programming Entity Framework: Code First,第28页第一版就捡起。
这不是一个好的ida。有可能这个代码可能会达到生产,你最终会对你的客户感到头疼...... –
单排下降,从包管理器控制台创建和种子:
update-database -TargetMigration:0 | update-database -force
KABOOM。
为什么需要两次执行相同的步骤? “update-database -force”我的意思是 – SwissCoder
只是一个小通知:“AutomaticMigrationDataLossAllowed = true;”在Configration中是必需的。 – Unicco
EF Core中的等效语法只是'Update-Database 0'。无论如何,这不适合OP的情况,其中*“更新历史记录似乎不同步”*;这种方法通过对迄今为止应用于数据库的每次迁移运行“向下”迁移来实现,所以如果您删除了以前应用的迁移,那么这将失败(并且如果您已经*修改了* a在应用之后迁移)。 [接受的答案](https://stackoverflow.com/a/16082497/1709587)更强大。 -1,以及'update-database -force'的无法解释的重复。 –
采取以下步骤:
Dbset<Item> Items{get;set;}
和的NuGet控制台被删除运行这些命令它将删除上下文中不存在但已在数据库中创建的表(s)
如果您创建数据库下面这个教程:https://msdn.microsoft.com/en-au/data/jj193542.aspx
...那么这可能工作:
.mdf
和.ldf
文件中查看/ SQL服务器对象资源管理器并从(localdb)\ v11.0子节点中删除数据库。另请参见https://stackoverflow.com/a/15832184/2279059
因此,没有命令可以通过迁移来删除数据库本身? – cjb110
......据我所知(不知道最新版本) - EF/migrations擅长于在没有Db时创建,然后在更改代码时进行“更新”。但是当你需要做一些管理维护时,你必须弄清楚 – NSGaga
我还必须从SQL服务器对象浏览器中删除数据库。 –