10

我创建了一个 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.

请帮忙。

4

4 回答 4

9

在系统表中有一个表叫做

__MigrationHistory

...我删除了它。

在包管理器控制台中运行命令“更新数据库”问题已修复!

更多信息:

http://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system-table/

于 2013-01-30T20:52:11.293 回答
5
于 2015-06-22T22:12:26.120 回答
0

我以前收到过那个错误信息....

检查您在连接字符串中指定的数据库是否已创建。如果不是,请创建它然后执行代码。

于 2013-01-30T19:38:11.300 回答
0

显然,可能有更好的方法来做到这一点,但由于这是令人惊讶的顶级谷歌帐户,我认为在阅读这些答案后提及我的想法会很好:

这是我面临的问题:我首先更改了由 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 表,并且在完全删除关系以尝试从头开始之后,错误得到了解决。但是,在更新数据库时,它抱怨“人”不存在 - 这导致我来到这里。

在查看了这些答案之后,我决定我懒得重新加载数据并认为迁移生成了 C# UP() 和 Down() 方法 - 我想,也许我可以参考另一个迁移......在提取上下代码之后进入该迁移中的公共方法,并引用新迁移中的方法-更新有效,然后创建了人员。为了安全起见-我将新调用包装在 try catch... 我的新 UP 方法是否如下所示:

protected override void Up(MigrationBuilder migrationBuilder)
    {
        try
        {
            new AddPeople().CreatePersonTable(migrationBuilder);
        }
        catch { }

        // Origional generated migration code
    }

这个答案带有我没有测试过下次是否会覆盖此迁移(丢失代码)的 caviat - 但是,如果迁移按顺序运行,那么您实际上可以运行一次,然后将其删除后。

于 2018-09-23T16:36:16.670 回答