无法使用Entity Framework Core更新数据库

8
我有一个使用SQL Server和EF Core的ASP.NET Core应用程序。它包含两个表格。我已成功创建了Entity Framework Core迁移,并使用它更新了第一个名为“Pies”的表格。
然后,当我添加另一个名为“Feedbacks”的表格时,我创建了第二个迁移。但是,在我尝试更新数据库时,它失败了,并且我收到了这个错误:
Error Number:2714,State:6,Class:16 There is already an object named 'Pies' in the database.
以下是DbContext类:
public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }

    public DbSet<Pie> Pies { get; set; }
    public DbSet<Feedback> Feedbacks { get; set; }
}

1
你在描述的步骤之间做了什么吗?比如删除之前的迁移文件或数据库中的表格? - Anton Toshik
我已经删除了最后一次迁移并重新添加了它,但问题仍然存在。 - SaTech
2个回答

3

如果您因为删除了迁移文件而混淆了EF Core迁移记录历史,同时您重新运行了删除一个迁移后的迁移,则您的快照也已经被污染。

请按照以下步骤操作:

  1. 删除所有剩余的迁移
  2. 删除数据库
  3. 创建新的初始迁移
  4. 创建新的数据库。

未来为了避免这些错误,请使用像git这样的版本控制系统。并在创建任何迁移之前提交。请注意,您需要从数据库中的_EfMigrations表中删除不正确地应用于您的数据库的迁移,因为Git不会对您的数据库进行版本控制。


谢谢 @Anton,我已经在使用 Git 了,所以我会返回到先前的版本。 - SaTech
@SaTech 如果你回到之前的版本,请确保按照我提到的最后一步操作,并从数据库中删除先前应用的迁移,除了 pie 的那个。id 将等于迁移的名称。 - Anton Toshik

1
这个错误是由于数据库表中的数据与数据库文件中的数据不同造成的。
很可能是您创建了数据库,然后删除了migraine文件夹。

谢谢@Reza,是的,当我在SQL Server对象资源管理器中查看时,反馈表在数据库中不可见。 - SaTech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接