Entity framework EF代码首先错误地重命名了表,这是一个错误吗?

Entity framework EF代码首先错误地重命名了表,这是一个错误吗?,entity-framework,ef-code-first,database-migration,Entity Framework,Ef Code First,Database Migration,我有两个实体,客户和电子邮件。我把它们剥去,只是为了表明什么是重要的 public class Customer { [DatabaseGenerated(DatabaseGeneratedOption.None)] [StringLength(6)] public string Id { get; set; } [Required] [StringLength(50)] public string Name { get; set; }

我有两个实体,客户和电子邮件。我把它们剥去,只是为了表明什么是重要的

public class Customer
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [StringLength(6)]
    public string Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    //Relationships
    public ICollection<Email> MainEmails { get; set; }
    public ICollection<Email> OrderEmails { get; set; }
    public ICollection<Email> InvoiceEmails { get; set; }
    public ICollection<Email> APEmails { get; set; }
}

public class Email
{
    [Key]
    [StringLength(50)]  
    public string Address { get; set; }

    public ICollection<Customer> MainCustomers { get; set; }
    public ICollection<Customer> OrderCustomers { get; set; }
    public ICollection<Customer> InvoiceCustomers { get; set; }
    public ICollection<Customer> APCustomers { get; set; }
}
更新数据库失败,出现以下错误:

System.Data.SqlClient.SqlException(0x80131904):找不到对象“dbo.CustomerMainEmails”,因为它不存在或您没有权限


我认为原因是表被重命名,然后它试图在不存在的表上放置键。这对我来说似乎是错误的。是虫子吗?首先,为什么要重命名dbo.CustomerMainEmails表

尝试移动下面的
RenameTable()
方法

DropForeignKey("dbo.CustomerMainEmails", "CustomerId", "dbo.Customers");
DropForeignKey("dbo.CustomerMainEmails", "Address", "dbo.Emails");
DropForeignKey("dbo.CustomerOrderEmails", "CustomerId", "dbo.Customers");
RenameTable(name: "dbo.CustomerMainEmails", newName: "CustomerEmails");

谢谢,但它根本不应该重命名那个表。只是遇到了同样的问题。问题是您还需要担心Down()方法。它在末尾有RenameTable,并在前面的语句中引用了新名称。当然看起来像个bug.FWIW,我也经历了同样的事情,只是我创建了一个新表,迁移将重命名一个完全不相关的表。在更新数据库之前,我修改了迁移文件(我使用updatedatabase-Script并运行生成的脚本)。不过,我不确定这是什么条件。我只能说,更新之前一定要仔细检查迁移代码:)@PaulZaczkowski对我来说完全一样。创建了一个新表,迁移自动生成一行以重命名一个不相关的表。不知道如何确定它为什么认为表需要重命名。@JustinSkiles为了补充我的问题,我尝试删除重命名行,这样我就不必修改依赖它的存储过程,从那一点开始,事情变得更糟了(耶)。我希望我有时间深入研究,看看到底发生了什么。
RenameTable(name: "dbo.CustomerMainEmails", newName: "CustomerEmails");
DropForeignKey("dbo.CustomerMainEmails", "CustomerId", "dbo.Customers");
DropForeignKey("dbo.CustomerMainEmails", "Address", "dbo.Emails");
DropForeignKey("dbo.CustomerOrderEmails", "CustomerId", "dbo.Customers");
DropForeignKey("dbo.CustomerMainEmails", "CustomerId", "dbo.Customers");
DropForeignKey("dbo.CustomerMainEmails", "Address", "dbo.Emails");
DropForeignKey("dbo.CustomerOrderEmails", "CustomerId", "dbo.Customers");
RenameTable(name: "dbo.CustomerMainEmails", newName: "CustomerEmails");