【问题标题】:Delete nested record ef删除嵌套记录 ef
【发布时间】:2018-02-12 07:25:11
【问题描述】:

我想将分离对象中的一些记录标记为已删除,然后将其从数据库中删除, 但出现异常“不允许向处于已删除状态的实体添加链接。”如何从 db 中删除此嵌套记录?

    public static void UpdateCar(rentcar2.Models.Car i)
        {
            using (rentcar2.Dal.Entities db = new rentcar2.Dal.Entities())
            {
                rentcar2.Dal.Car cr = AutoMapper.Mapper.Map<rentcar2.Dal.Car>(i);
                int a = 0;
                foreach (rentcar2.Dal.CarImage c in cr.CarImages)
                {
                    c.CarId = i.Id;
                    // fl   0-old_unmodified, 1-adding, 2-deleted, 3-modified
                    switch (i.CarImages[a].fl)
                    {//try to mark record
                        case 0:
                            db.Entry(c).State = EntityState.Unchanged;
                            break;
                        case 1:
                            db.Entry(c).State = EntityState.Added;
                            break;
                        case 2:
                            **db.Entry(c).State = EntityState.Deleted;**
                            break;
                        case 3:
                            db.Entry(c).State = EntityState.Modified;
                            break;
                    }
                    a++;
                }    
                try
                {
                    **db.Cars.Attach(cr);**  // excpetion here 
                    db.Entry(cr).State = EntityState.Modified;
                    db.SaveChanges();
                }
                catch (Exception e)
                {
                    throw new System.Exception("", e);
                }
            }
        }

【问题讨论】:

  • 我没明白你的意思?您是在寻找 Cascade Delete stackoverflow.com/a/34038321/2946329 还是 DB 端 stackoverflow.com/a/37459049/2946329
  • 只需在您的数据库中使用级联并通知实体框架您在配置中的关系上有级联。此外,您的方法很长,几乎什么都不做。删除try/catch,然后删除switch,使用Dictionary&lt;int, EntityState&gt;
  • 我的意思是我不能附加带有标记为 EntityState.Deleted 的记录的实体,以便从数据库中删除它

标签: c# database entity-framework


【解决方案1】:

您首先将实体附加为未更改,然后将其删除。这样,EF 将了解在先前状态(现有)到预期的新状态(已删除)之间存在实际的状态转换。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
相关资源
最近更新 更多