How to recreate my EF CodeFirst Table?
我创建了一个 Code First 类
在Sql中自动创建了一个数据库。
我删除了表格 :(
我已启用迁移:
1 2 3 | AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; Database.SetInitializer(new DropCreateDatabaseAlways<SurveyContext>()); |
然而
1 2 3 | update-database -force Cannot find the object"dbo.CustomerResponses" because it does not exist or you do not have permissions. |
请帮忙。
在系统表中有一个名为
的表
1 | __MigrationHistory |
...我删除了它。
在包管理器控制台中运行命令 "update-database"
问题已解决!
更多信息:
http://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system-table/
Daf De Giraf 在这里有一个更好的答案,它不会抹去你的迁移历史。
If you worked the correct way to create your migrations by using the
commandAdd-Migration"Name_Of_Migration" then you can do the
following to get a clean start (reset, with loss of data, of
course):
Update-database -TargetMigration:0
Normally your DB is empty now since the down methods were executed.
Update-database
This will recreate your DB to your current migration
显然可能有更好的方法来做到这一点,但由于这是令人惊讶的顶级 Google 帐户,我认为在阅读这些答案后提及我的想法会很好:
这是我面临的问题:
我首先更改了由 EF6 代码生成的 FK,但遇到了错误:
1 | 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 表,并且在完全删除关系以尝试从头开始之后,错误得到了解决。但是,在更新数据库时,它抱怨"人"不存在 - 这导致我来到这里。
在查看了这些答案后,我决定我懒得重新加载数据并认为迁移生成了 C# UP() 和 Down() 方法 - 我想,也许我可以参考另一个迁移...
在该迁移中将 up 和 down 代码提取到公共方法中,并从新迁移中引用这些方法后 - 更新工作,然后创建了 person。为了安全起见-我将新调用package在 try catch... 我的新 UP 方法是否如下所示:
1 2 3 4 5 6 7 8 9 10 | protected override void Up(MigrationBuilder migrationBuilder) { try { new AddPeople().CreatePersonTable(migrationBuilder); } catch { } // Origional generated migration code } |
这个答案带有我没有测试过下次是否会覆盖此迁移(丢失代码)的 caviat - 但是如果迁移按顺序运行,那么您实际上可以运行一次,并且然后删除它。
我过去曾收到过该错误消息....
检查您在连接字符串中指定的数据库是否已创建。如果不是,则创建它然后执行代码。