2013-12-08 102 views
1

我有以下類,我已經使用EF Code-first創建了數據庫表。但是,我發現刪除級聯已打開並試圖將其刪除。先用EF代碼禁用級聯刪除不起作用?

public class Category 
{ 
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    [MaxLength(100)] 
    public string Title { get; set; } 

    public virtual ICollection<Event> Events { get; set; } 
} 

public class Event 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    [Required] 
    [ForeignKey("Category")] 
    public int CategoryId { get; set; } 
    public virtual Category Category { get; set; } 
} 

而且我在DbContext類中添加了以下代碼。

​​

但是,生成遷移代碼生成與一個與cascadeDeletion和另一個沒有兩份AddForeignKey狀態。

AddForeignKey("dbo.Event", "CategoryId", "dbo.Category", "Id"); 
AddForeignKey("dbo.Event", "CategoryId", "dbo.Category", "Id", cascadeDelete: true); 
CreateIndex("dbo.Event", "CategoryId"); 
CreateIndex("dbo.Event", "CategoryId"); 

回答

0

.WithRequired()通話使用configures the relationship to be optional:required without a navigation property on the other side of the relationship這樣的結果在一個AddForeignKey電話。

然後,您有一個Category導航屬性尚未在FluentAPI中配置,因此EF會生成另一個使用默認配置的AddForeignKey調用。

嘗試使用的覆蓋WithRequiredconfigures the relationship to be optional:required with a navigation property on the other side of the relationship

modelBuilder.Entity<Category>() 
      .HasMany(c => c.Events) 
      .WithRequired(e => e.Category) 
      .HasForeignKey(e => e.CategoryId) 
      .WillCascadeOnDelete(false);