我创建了Code First类
自动在Sql中创建数据库。
我删除了表:(
我启用了迁移功能:
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
Database.SetInitializer(new DropCreateDatabaseAlways<SurveyContext>());
然而
update-database -force
Cannot find the object "dbo.CustomerResponses" because it does not exist or you do not have permissions.
请帮忙。
答案 0 :(得分:9)
在系统表中有一个名为
的表__MigrationHistory
......我删除了它。
在程序包管理器控制台中运行命令“update-database” 问题已解决!
更多信息:
答案 1 :(得分:4)
Daf De Giraf has a better answer here。
如果您使用正确的方法来创建迁移 命令
Add-Migration "Name_Of_Migration"
然后你可以做到 以下是获取干净启动(重置,丢失数据, 当然强>):
Update-database -TargetMigration:0
由于执行了down方法,通常你的DB现在是空的。- 醇>
Update-database
这会将您的数据库重新创建为当前的迁移
答案 2 :(得分:0)
过去我收到了错误消息....
检查是否已创建在连接字符串中指定的数据库。如果不是,请创建它然后执行代码。
答案 3 :(得分:0)
显然,这样做可能有更好的方法,但是由于这是Google的顶级帐户,因此我认为提及这些答案后我的想法会很不错:
这是我面临的问题: 我首先更改了EF6代码生成的FK,并遇到了错误:
Unable to determine the relationship represented by navigation property 'Account.SalaryIncomes' of type 'ICollection<Person>'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.
我尝试了多种方法来定义映射,以期解决此错误,但是最终我删除了Person表,并在完全删除了关系以尝试从头开始时解决了该错误。但是,在更新数据库时,它抱怨说“ Person”不存在-这导致我出现在这里。
在查看了这些答案之后,我认为我懒得重新加载数据,并认为迁移生成了C#UP()和Down()方法-我认为,也许我可以引用另一个迁移... 在该迁移中将向上和向下的代码提取到公共方法中,并从新迁移中引用这些代码之后,便创建了有效的更新和人员。为了安全起见-我将新呼叫包装在try catch中...我的新UP方法看起来像这样:
protected override void Up(MigrationBuilder migrationBuilder)
{
try
{
new AddPeople().CreatePersonTable(migrationBuilder);
}
catch { }
// Origional generated migration code
}
此答案带有我尚未测试过的鱼子酱,以确保下次是否可以覆盖此迁移(丢失代码)-但是,如果迁移按顺序运行,那么实际上您可以按此运行一次,然后然后将其删除。