0

这是我探索 ASP.NET MVC 4 的第一天。具体来说,我使用的是 Web API,显然这个问题实际上是一个 MS SQL 问题。我正在运行 EF 迁移 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; }
    }
}

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

谢谢。

4

1 回答 1

1

卢克·麦格雷戈是正确的。除了您修复此问题的方式之外,您还可以覆盖实体框架为您提供的默认映射,以便它不会级联删除。在 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);
}

这仍然适用于自动迁移。

希望有帮助。

于 2012-12-28T12:48:09.320 回答