欢迎各位兄弟 发布技术文章
这里的技术是共享的
见红色的字
namespace MyProject.Migrations { using System; using System.Data.Entity.Migrations; public partial class _1002 : DbMigration { public override void Up() { } public override void Down() { } } }
我可以通过从 _MigrationHistory 表中删除上次迁移的记录来解决此问题。在我将新模型对象的 DbSet 添加到 DbContext 类之前,此记录已被错误地创建。在此删除之后,使用正确的 Up() 和 Down() 方法创建了新的迁移。
我遇到了这个问题,因为我忘记添加 {get; set;} 在我的变量名之后
在将现有的 EF Core 数据上下文回滚为空时,我的迁移不会生成,直到我删除了ApplicationDbContextModelSnapshot
伴随迁移的内容。
此类是自动生成的,需要与您当前的迁移级别保持一致。
在我的例子中,datacontext 项目是一个类库项目。它与 asp.net mvc 5 项目的启动项目不同。现在错误地启动项目中的连接字符串指向不同的不同数据库。
所以要保证datacontext项目和startup项目指向同一个数据库。还可以使用问题中提到的完整命令,如下所示。您也可以包括 -Force。
add-migration "InitialMigration" -verbose -ProjectName "MyEFproject" -Force
就我而言,我正在进行迁移,将字段添加到现有表中,并以空Up
和Down
方法结束,
我有这样的事情:
public bool ExistingField { get; set; } bool NewField { get;set; }
您看得出来差别吗...?
如果您犯了这个错误,请使用相同的名称重新运行迁移(您可能需要添加-Force
参数以将其完整搭建)。
PS。在尝试执行任何类型的 EF 命令之前,请始终确保您的项目已完全构建。如果您的项目尚未构建,那么您就是在自找麻烦。
当我错误地使用一对多关系而不是多对多关系关联两个表时(即我忘记了其中一个导航属性),我正在添加空迁移。我有一个种子文件,它期待多对多关系,随后在迁移过程中失败,导致迁移失败。不幸的是,没有任何输出表明问题很明显,只有通过使用 Entity Framework Power Tools(v4,但安装在 VS2015 中),我才能直观地看到不正确的关系并意识到这可能是原因。
在附加此参数的空迁移之前,我必须使用最新迁移更新数据库-TargetMigration:"{your-migration-name}"
。
可能它会告诉您,我们尝试的下一个错误会导致数据丢失。如果您负担得起,请附加-Force
它。
然后我尝试添加我的新的Add-Migration
,它不是空的。
如果上面抛出异常,您可能需要做的最后一件事是转到 SQL Server Management Studio 并删除最后一个Automatic migration
并尝试再次添加它。
从您的迁移文件夹中删除所有内容!之后添加迁移。
在我想向我的数据库添加一个额外的列之后,我遇到了这个确切的问题。因为除非表为空,否则我的数据不会播种,因此我删除了所有表和迁移以重新创建表。当我尝试迁移时,迁移有空的 up 和 down 方法。
我通过删除快照文件解决了这个问题,因为这是创建问题。所以我删除了所有迁移和快照文件,再次添加迁移并运行更新数据库。表和迁移已使用我的新列成功更新。
但是,如果您正在处理测试数据,更好的方法是运行 down 方法并像这样删除表。显然,在现实世界中删除表格是很糟糕的。
对我来说,问题是应该对应于表 id 的 Id 属性被命名为 FeedbackId。我更改为“Id”,然后 Up/Down 不再为空。不知道这是否能有所帮助
您需要将表添加到
DbContext
类的实现中,例如