引入外键约束'fk_dba . models_dba . makes_makeid 'on table

本文关键字:dba makes makeid on table models fk 约束 | 更新日期: 2023-09-27 17:49:45

这是我探索ASP的第一天。Net MVC 4。具体来说,我正在使用Web API,显然这个问题实际上是一个MS SQL问题。我正在运行EF migrations PM> Update-Database以获得此错误,但是在第一次创建模型时已经看到了它。我的模型是:

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int MakeId { get; set; }
    public virtual Make Make { get; set; }
    public int ModelId { get; set; }
    public virtual Model Model { get; set; }
}
public class Make
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Model> Models { get; set; }
}
public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int MakeId { get; set; }
    public virtual Make Make { get; set; }
}

数据库上下文为:

public class CarsContext : DbContext
    {
        public CarsContext() : base("name=CarsContext") { }
        public DbSet<Car> Cars { get; set; }
        public DbSet<Make> Makes { get; set; }
        public DbSet<Model> Models { get; set; }
    }
}

将感谢任何帮助。我的背景是5/6的PHP和MySQL,所以这是一个陡峭的学习曲线。

谢谢。

引入外键约束'fk_dba . models_dba . makes_makeid 'on table

Luke McGregor是正确的。除了解决这个问题的方法之外,你还可以覆盖实体框架给你的默认映射,这样它就不会级联删除。在你的CarsContext类中,你可以覆盖OnModelCreating()方法,并使用fluent指定你自己的映射。这覆盖了EF在默认情况下尝试做的事情。所以你可以这样做:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Car>()
            .HasOptional(x => x.Model)
            .WithMany(y => y.Cars) //Add this property to model to make mapping work
            .WillCascadeOnDelete(false);
}

自动迁移仍然可以使用。

希望对你有帮助。