gpt4 book ai didi

asp.net-core-2.0 - Database.Migrate() 创建数据库但不创建表,EF 和 .NET Core 2

转载 作者:行者123 更新时间:2023-12-04 08:33:42 28 4
gpt4 key购买 nike

这个问题已被问过几次,但没有一个解决方案/文档对我有用。

场景 - 我需要从头开始构建一个数据库,并使用所有代码迁移来编辑它,根据文档,下面的行应该从 DbContext/ModelBuilder 创建数据库。

_dbContext.Database.Migrate();

然而,这只是创建数据库本身而不是任何表。如果我运行下面的命令,
_dbContext.Database.EnsureCreated();

数据库和所有表都已创建,但这不是一个选项,因为我需要进一步编辑迁移。我在 Migrate 行之后直接尝试了下面的代码,但 pendingMigrations 始终为 0。
var pendingMigrations = _dbContext.Database.GetAppliedMigrations().ToList();
if (pendingMigrations.Any())
{
var migrator = _dbContext.Database.GetService<IMigrator>();
foreach (var targetMigration in pendingMigrations)
migrator.Migrate(targetMigration);
}

有什么我在这里想念的吗? Database.Migrate() 不应该同时创建表和数据库吗?

注意 - 在测试中,我在尝试另一种方法之前删除了数据库。

最佳答案

另一个典型的案例是在此处发布问题后半小时才找到答案一两天。发布我的解决方案,以防其他人遇到类似问题。

TLDR - _dbContext.Database.Migrate();不会创建迁移。

基本上,dbContext.Database.EnsureCreated()不关心迁移,这就是为什么它生成完整的数据库 inc 表(但是当然你不能迁移)。
_dbContext.Database.Migrate();如果数据库不存在,则应用迁移并创建数据库,但如果没有迁移,则不会创建表。

基本上我有一个项目作为资源,我试图从用户生成的新应用程序中复制该项目,但由于我从未在资源项目中运行任何迁移,因此没有什么可迁移的。运行 Add-Migration Initial在资源项目的 PMC 中,它为项目提供了初始迁移文件,因此当我在新数据库上运行 migrate 时,它​​知道要创建哪些表。

关于asp.net-core-2.0 - Database.Migrate() 创建数据库但不创建表,EF 和 .NET Core 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50507668/

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