EF4中的级联删除CTP5 Code First对子记录执行更新

时间:2011-01-24 11:14:38

标签: c# entity-framework-4 code-first ef-code-first entity-framework-ctp5

使用描述here的方法,我试图删除父记录和所有相关的子记录。但是,会发生什么是按预期删除父级,但子记录键字段更新为NULL而不是删除。

我还将子表外键的删除规则设置为Cascade,并从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();

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

1 个答案:

答案 0 :(得分:2)

由于Product类(即Product.CategoryId)上的外键属性具有可空类型(即string),因此Product和Category之间的关联已配置为可选。要使此关联成为必需,以便在删除父项时删除子实体,您需要将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; }
}