繁体   English   中英

实体框架POCO-可以设置级联吗?

[英]Entity Framework POCO - Possible to set Cascade?

我有彼此链接的基本递归类别。 当我尝试删除有孩子的类别时,出现通常的错误。

我一直做的工作是递归删除所有子级的函数,但是我不知道我是否可以以某种方式将CASCADE ON DELETE设置为使用EF的POCO类,这样就不需要实现自己的删除机制了?

错误

DELETE语句与SAME TABLE REFERENCE约束“ FK_dbo.Categories_dbo.Categories_RootCategoryId”冲突。 在数据库“网站”的表“ dbo.Categories”的列“ RootCategoryId”中发生了冲突。

模型

public class Category
{
    public int Id { get; set; }

    public int? RootCategoryId { get; set; }
    public virtual Category RootCategory { get; set; }
    public virtual ICollection<Category> ChildCategories { get; set; }
}

我现在有什么

目前,我在删除类别之前先删除关系。 但是,如果我想递归删除所有子类别怎么办? 只有级联他们才能达到目的。

public ActionResult Delete(int id)
{
    var category = _db.Categories.Single(x => x.Id == id);
    if (category.RootCategoryId == null)
    {
        category.ChildCategories.ToList().ForEach(x => x.RootCategoryId = null);
    }
    else
    {
        category.ChildCategories.ToList().ForEach(x => x.RootCategoryId = category.RootCategoryId);
    }
    _db.Categories.Remove(category);
    _db.SaveChanges();
    return RedirectToAction("Index", "Category");
}

我要解决此问题的方法是使用OnModelCreating Fluent API。

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .HasMany(u => u.ProjectAuthorizations)
        .WithRequired(a => a.UserProfile)
        .WillCascadeOnDelete(true);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM