簡體   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