如何创建我的EF Code First Table?

时间:2013-01-30 16:51:31

标签: entity-framework code-first

我创建了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 个答案:

答案 0 :(得分:9)

在系统表中有一个名为

的表
__MigrationHistory

......我删除了它。

在程序包管理器控制台中运行命令“update-database” 问题已解决!

更多信息:

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

答案 1 :(得分:4)

Daf De Giraf has a better answer here

  

如果您使用正确的方法来创建迁移   命令Add-Migration "Name_Of_Migration"然后你可以做到   以下是获取干净启动(重置,丢失数据,   当然):

     
      
  1. Update-database -TargetMigration:0
           由于执行了down方法,通常你的DB现在是空的。

  2.   
  3. Update-database    这会将您的数据库重新创建为当前的迁移

  4.   

答案 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
    }

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