使用已删除的子级

时间:2016-06-07 13:10:44

标签: c# .net entity-framework entity-framework-6

我从客户端收到更新的图表,需要在DB中更新它。该模型是一个拥有一系列设备的忍者。

在DB中就像这样

Ninja id = 1
    Equipments:
        Sword   Id 1
        Candle  Id 2
        Book    Id 3

更新的模型就像这样

Ninja id = 1
    Equipments:
        Sword of Metal  Id 1 (Renamed)
        Candle          Id 2
        Gold Nugget     Id 4 (Added)

        The book with id3 is missing cause deleted. 

所以我尝试使用这种方法的方法是使用相同的方法添加一个新的忍者,如果它不是一个已经改变的现有的忍者。这是有效的,所以我不需要这方面的帮助。但我需要帮助的是删除更新模型中缺少的设备。

我检索属于Id 1的所有设备的列表,并检查它们是否存在于更新的模型中。这个迭代似乎将缺少的设备(Book id3)添加到更新的忍者!我猜它是因为我附上了它。无论如何,它永远不会被标记为已删除,并且永远不会被删除。

为什么会发生这种情况?你应该如何在EF中改变这些图形呢?

  /// </summary>
    public static string AddNinjaGraph(Ninja uppdatedNinja)
    {
        using (var db = new NinjaDbContext())
        {   
            //Check for id if addNinja is new or updating an old             
            db.Entry(uppdatedNinja).State = uppdatedNinja.Id == 0 ? EntityState.Added : EntityState.Modified;

            foreach (var eq in uppdatedNinja.EquipmentOwned)
            {
                db.Entry(eq).State = eq.Id == 0 ? EntityState.Added : EntityState.Modified;
            }

            if (uppdatedNinja.Id > 0)
            {               
                //Go through each ninja equipment belongin to this ninja and delete from DB if its not in the updated ninja graph
                foreach (var eq in db.NinjaEquipment.Where(e => e.Ninja.Id == uppdatedNinja.Id))
                {
                    if (!uppdatedNinja.EquipmentOwned.Contains(eq))
                    {
                        //If ninja in DB has an equipment that updated ninja does not have, delete equipment
                        db.Entry(eq).State = EntityState.Deleted;
                    }
                }
            }
            db.SaveChanges();

            return uppdatedNinja.Id.ToString();
        }
    }

0 个答案:

没有答案