2012-12-27 30 views
0

這是我花了第一天探索ASP.NET MVC 4的具體情況。具體來說,我使用Web API顯然這個問題實際上是一個MS SQL問題。我正在運行EF遷移PM>更新數據庫以獲取此錯誤,但在首次創建模型時已經看到它。我的模型是:在表'Models'中引入FOREIGN KEY約束'FK_dbo.Models_dbo.Makes_MakeId'可能會導致循環或多個級聯路徑

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; } 
} 

的DB背景是:

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實體,所以這是一個陡峭的學習曲線。

謝謝。

+0

你可以請你發佈你的上下文文件嗎? – IronMan84

+0

添加上下文類,希望這是正確的。仍在學習:) – sjdweb

+0

我認爲(因爲如果你刪除了一輛汽車,其意義在於級聯會刪除一個Make和一個Model,但它也會嘗試刪除可能與之關聯的Make隨後的模型刪除級聯。 –

回答

1

盧克麥格雷戈是正確的。除了解決此問題的方式外,您還可以覆蓋實體框架爲您提供的默認映射,以便它不會級聯刪除。在您的CarsContext類中,您可以重寫OnModelCreating()方法並使用流暢指定自己的映射。這會忽略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); 
} 

這將仍與自動遷移工作。

希望有所幫助。

相關問題