簡體   English   中英

從父實體更新子實體

[英]Update child entities from parent entity

根據以下情況,我想從父實體更新子實體。

我按照以下方法解決了這個問題。

  1. 父級的子級實體從數據庫中刪除。
  2. 父級的新子級實體從數據庫添加。

那是真的嗎?

    public int SaveBasket(Addition addition)
    {
        var entity = ApplicationDbContext.Additions.Include(x => x.Basket).SingleOrDefault(x => x.AdditionId == addition.AdditionId);

        //Remove Basket
        if (entity.Basket.Count > 0)
        {
            foreach (var item in entity.Basket)
            {
                context.Entry(item).State = EntityState.Deleted;
            }

            ApplicationDbContext.SaveChanges();
        }

        //Add new basket entities from posting json data
        entity.Basket = addition.Basket;

        return ApplicationDbContext.SaveChanges();
    }

我認為您正在尋找以下內容:

    public int SaveBasket(Addition addition)
    {
        var entity = ApplicationDbContext.Additions.Find(addition.AdditionId); // Find by primary key

        //Remove Basket
        if (entity.Basket.Count > 0)
        {
            entity.Basket.Clear(); // Empty out the basket

            ApplicationDbContext.SaveChanges();
        }

        //Add new basket entities from posting json data
        addition.Basket.ForEach(b => entity.Basket.Add(b)); // Add the items

        return ApplicationDbContext.SaveChanges();
    }

很難說出您的數據結構是什么,但這應該有所幫助。

更新資料

從您的評論看來,您似乎要刪除整個basket記錄。

    public int SaveBasket(Addition addition)
    {
        var baskets = ApplicationDbContext.Basket.Where(b => b.AdditionId == addition.AdditionId);

        //Remove Basket
        ApplicationDbContext.Basket.RemoveRange(baskets);
        ApplicationDbContext.SaveChanges();
        ApplicationDbContext.Basket.AddRange(addition.Basket);
        return ApplicationDbContext.SaveChanges();
    }

根據模型的外觀,您也許可以執行此操作以刪除和添加子代。

public int SaveBasket(Addition addition)
{
    var dbAddition = ApplicationDbContext.Additions
        .Include(x => x.Basket)
        .SingleOrDefault(x => x.AdditionId == addition.AdditionId);

    ApplicationDbContext.Basket.RemoveRange(dbAddition.Basket);
    ApplicationDbContext.Basket.AddRange(addition.Basket);

    return ApplicationDbContext.SaveChanges();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM