gpt4 book ai didi

c# - 如何强制 EF 代码首先重新创建数据库?

转载 作者:可可西里 更新时间:2023-11-01 07:54:47 26 4
gpt4 key购买 nike

我有一堆 Code First 创建的表。

然后在 SQL 中我删除了一个表,这样我就可以不可避免地在堆栈上问这个问题。

在包管理控制台中使用 update-database 我得到:

Cannot find the object "dbo.ContractParents" because it does not exist or you do not have permissions.

重新创建表格的最佳方法是什么?

我已经阅读了关于 context.Database.CreateIfNotExists();

我把它放在我的种子函数中,但什么也没做。

谢谢!

最佳答案

要解释更新数据库命令会发生什么,以及为什么种子中的 context.Database.CreateIfNotExists() 方法不起作用:

当您运行 update-database 命令时,它首先查看您的连接字符串以查看数据库是否存在。如果是,它会查看迁移历史表并根据 DbContext 类中的内容进行检查。如果它发现有表丢失或更改,它将尝试更新数据库。直到完成之后才会调用 Seed 方法,所以这就是它不起作用的原因。

在使用 EF-Code First 进行开发时,我通常会根据数据库的大小以几种不同的方式解决问题。我通常会删除所有表(包括迁移历史表),然后再次运行 update-database 命令。工作正常,如果你有很多表,上面有很多 FK 约束,那么真的很耗时。

终于看腻了,找到了these scripts使表的删除速度呈指数级增长。我这样做是因为我在 Azure 上运行我的应用程序。当我在我的本地机器上运行它时,我会删除整个数据库并创建一个具有相同名称的全新数据库。

优雅的解决方案?不。它有效吗?或多或少...

关于c# - 如何强制 EF 代码首先重新创建数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19118953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com