3

使用此处描述的方法,我正在尝试删除父记录和所有关联的子记录。但是,发生的情况是父项按预期删除,但子记录键字段更新为 NULL 而不是被删除。

我还将子表外键的Delete Rule设置为Cascade,在SQL Server Management中从父表中删除按预期执行了级联删除。

我首先遵循这个演练,并修改代码以执行删除。

这是代码:

 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();

有什么我想念的吗?还是孤儿记录了预期的结果?

4

1 回答 1

2

由于 Product 类 (ie Product.CategoryId) 上的外键属性具有可为空的类型 (ie string),因此 Product 和 Category 之间的关联已配置为可选。要使此关联成为必需,以便子实体因删除父实体而被删除,您需要CategoryIdRequired我在以下代码中所做的那样标记:

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; }
}
于 2011-01-24T18:10:42.280 回答