这是我探索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,所以这是一个陡峭的学习曲线。
谢谢。
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);
}
自动迁移仍然可以使用。
希望对你有帮助。