使用描述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();
有什么我想念的吗?或孤儿是否记录了预期的结果?
答案 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; }
}