3

使用here所述的方法,我試圖刪除父記錄和所有關聯的子記錄。但是,會發生什麼情況是父按預期被刪除,但子記錄鍵字段更新爲NULL而不是被刪除。EF4中的級聯刪除CTP5代碼首先對子記錄執行更新

我還將子表外鍵的刪除規則設置爲級聯,並且從SQL Server Management中的父表中刪除按預期方式執行級聯刪除。

我開始按照這walkthough,並修改代碼來執行刪除。

這是代碼:

using (var db = new ProductContext()) 
{ 
    var food = db.Categories.Find("FOOD"); 
    ((IObjectContextAdapter)db).ObjectContext.LoadProperty(food, f => f.Products); 

    db.Categories.Remove(food); 
    int recordsAffected = db.SaveChanges(); 

有我丟失的東西?或者孤兒是否記錄了預期的結果?

回答

2

由於產品類別(即Product.CategoryId)上的外鍵屬性具有可爲空的類型(即string),產品和類別之間的關聯被配置爲可選項。爲了使這種關聯需要讓孩子實體獲得儘可能刪除您需要標記CategoryId作爲Required正如我在下面的代碼做了父母的結果刪除:

public class Category 
{ 
    public string CategoryId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 

    [Required] 
    public string CategoryId { get; set; } 
    public virtual Category Category { get; set; } 
} 
+0

感謝您的答案和解釋! – markpsmith 2011-01-25 15:27:38