如何在不使用迁移的情况下确保 EF Core 中存在表?



我正在编写一个快速原型项目。我不想使用 EF 迁移,因为我还没有真正了解它们。该应用程序将数据从文件导入数据库。如果架构发生更改,我的策略将是"删除表并让 EF 重新生成它们"。

这适用于在启动时添加数据,但我在决定是否需要构建数据库时遇到了麻烦。例如:

var inputCount = parsedData.Items.Length;
var dbCount = _itemsContext.Items.Count();
if (inputCount != dbCount)
{
// Do updates/inserts
}

由于该表不存在,因此我无法查询计数。我可以处理异常,但这感觉有点混乱。如果表不存在,我只需要 EF 来创建表。我读到的所有内容都引导我向项目添加迁移,但这感觉像是我不想要的功能。

(我找不到我的用例生成的问题的明显重复项。现在我知道了答案,我可以找到讨论它的问题,但我希望这篇文章有助于以这种方式指导某人。

DbContext类型具有一个Database属性,该属性使你能够对 EF 管理的内容进行某种后门访问。它有一个方便的方法EnsureCreated(也是一个异步实现(,它将确保表在配置 DbContext 时存在。

感谢此 EF 教程对此进行了解释,以及其他一些奇特的初始化方案。

根据我读过的其他一些东西,这似乎使得以后添加迁移变得不可能,也许Database.Migrate()更安全地做同样的事情。因此,在执行此操作之前,请先了解是否需要迁移(但是如果您打算使用迁移,那么进行手动初始化似乎很愚蠢?

最新更新