C# 添加不存在表的迁移问题

C# 添加不存在表的迁移问题,c#,entity-framework,entity-framework-migrations,C#,Entity Framework,Entity Framework Migrations,当我生成迁移时,它无法计算出我在数据库中没有特定的表报告,因此生成的迁移是空的。尽管如此,我已经准备好了所有代码,以便生成能够顺利运行 此代码很旧,直到今天才完成。此外,我找不到任何引用上述表的迁移,但出于某种原因,它认为该表已经存在于数据库中。例如,如果我在映射类中更改表名,如下图所示,它将使用RenameTable命令生成迁移。当然,updatedatabase命令将失败 this.ToTable("Report"); 你知道我该如何解决这个问题吗?正如评论中所指出的,这个问题是通过使用以

当我生成迁移时,它无法计算出我在数据库中没有特定的表报告,因此生成的迁移是空的。尽管如此,我已经准备好了所有代码,以便生成能够顺利运行

此代码很旧,直到今天才完成。此外,我找不到任何引用上述表的迁移,但出于某种原因,它认为该表已经存在于数据库中。例如,如果我在映射类中更改表名,如下图所示,它将使用RenameTable命令生成迁移。当然,updatedatabase命令将失败

this.ToTable("Report");

你知道我该如何解决这个问题吗?

正如评论中所指出的,这个问题是通过使用以下方法解决的:

删除该实体,并注释掉使用该实体的所有位置。 创建迁移并清除Up和Down方法中的代码。 应用迁移。 重新添加实体。 创建另一个迁移。它现在应该生成代码来添加表。
正如评论中指出的,通过使用以下黑客解决了该问题:

删除该实体,并注释掉使用该实体的所有位置。 创建迁移并清除Up和Down方法中的代码。 应用迁移。 重新添加实体。 创建另一个迁移。它现在应该生成代码来添加表。
如果不关心迁移中使用SQL、、的数据,请使用IF EXIST编写SQL脚本以删除此表,然后可以添加此表again@KD既然这个表不存在,我想这个脚本不会有任何效果吧?尽管如此,我还是尝试在生成的迁移中添加以下行:SqlIF EXISTS SELECT*FROM INFORMATION_SCHEMA.TABLES,其中TABLE_NAME='Reports'DROP TABLE Reports;然后我再次生成了迁移,没有任何效果,正如预期的那样。我是否遗漏了您所说的内容?EF正在使用_MigrationHistory表跟踪预期的数据库状态。因此,让我们暂时假设报告存在于以前的迁移中,并且出于任何原因,有人手动上下更改了迁移代码,因此它不会创建表。EF现在仍然根据其保存的迁移历史来考虑表可用性,并且对于进一步的迁移,它将生成代码来改变表而不是创建表。提供的信息有点不清楚。我相信这就是问题所在。但是我怎样才能修复它呢?我还可以在原始帖子中添加哪些信息?如果您的代码受版本控制,您可能希望找到发生更改的迁移位置,并进行进一步调查。修复缺少的表的一个小技巧是:删除实体,创建迁移,清除Up和Down方法中的代码,然后应用迁移。重新添加实体并创建另一个迁移-现在应生成代码以添加表。如果不关心迁移中使用SQL、、的数据,请使用IF EXIST编写SQL脚本以删除此表,然后可以添加此表again@KD既然这个表不存在,我想这个脚本不会有任何效果吧?尽管如此,我还是尝试在生成的迁移中添加以下行:SqlIF EXISTS SELECT*FROM INFORMATION_SCHEMA.TABLES,其中TABLE_NAME='Reports'DROP TABLE Reports;然后我再次生成了迁移,没有任何效果,正如预期的那样。我是否遗漏了您所说的内容?EF正在使用_MigrationHistory表跟踪预期的数据库状态。因此,让我们暂时假设报告存在于以前的迁移中,并且出于任何原因,有人手动上下更改了迁移代码,因此它不会创建表。EF现在仍然根据其保存的迁移历史来考虑表可用性,并且对于进一步的迁移,它将生成代码来改变表而不是创建表。提供的信息有点不清楚。我相信这就是问题所在。但是我怎样才能修复它呢?我还可以在原始帖子中添加哪些信息?如果您的代码受版本控制,您可能希望找到发生更改的迁移位置,并进行进一步调查。修复缺少的表的一个小技巧是:删除实体,创建迁移,清除Up和Down方法中的代码,然后应用迁移。重新添加实体并创建另一个迁移-现在应该生成代码来添加表。