数据库数据中已经有一个名为 'cars' 的对象

There is already an object named 'cars' in the database-data

我正在使用代码优先开发 MVC 项目。我首先使用代码创建我的数据库,如您所见:

public class DataContext:DbContext
{
    public DataContext()
        : base("DefaultConnection")
    {
        this.Configuration.LazyLoadingEnabled = false;
        this.Configuration.ProxyCreationEnabled = false;

        Database.SetInitializer(
            new MigrateDatabaseToLatestVersion<DataContext, MigrationsConfiguration>()
            );
    }
    public DbSet<Member> Members { get; set; }
    public DbSet<Traffic> Traffics { get; set; }
    public DbSet<Car> Cars { get; set; }
    public DbSet<Validation> Validations { get; set; }
    public DbSet<Log> Logs { get; set; }
    public DbSet<File> Files { get; set; }
}

我在公司服务器上上传了我的项目,他们使用我的项目并向数据库输入了一些值,所以有时我更改了数据库中的一些列,然后我在SQL设计中正常添加到数据库table,所以我也更改了部分代码,现在我上传发布的文件时出现此错误:

There is already an object named 'Cars' in the database.

注意:我无法删除数据库,因为其中有数据,正如我所说,我已将新列添加到数据库中,但我的应用程序无法连接到该数据库。

迁移部分:

public class MigrationsConfiguration : DbMigrationsConfiguration<DataContext>
{
    public MigrationsConfiguration()
    {
        this.AutomaticMigrationDataLossAllowed = true;
        this.AutomaticMigrationsEnabled = true;
    }
}

由于您的生产数据库中已有数据,因此请不要使用自动迁移。您的首要任务是让您的数据库与您的模型同步。你如何做到这一点将取决于你的模型有多复杂,例如多少张桌子。我的建议是:

  • 禁用自动迁移
  • 将您的开发副本指向空白数据库,并创建初始迁移
  • 运行 Update-Database - 为迁移生成 SQL 脚本的脚本
  • 手动更改脚本,使其可以 运行 在您的生产数据库中
  • 运行 这在您的生产数据库中

一旦达到这一点,请确保每次要对模型进行更改时都添加迁移,而不是手动进行。