【问题标题】:Entity Framework: Add child record to and existing parent实体框架:将子记录添加到现有父记录
【发布时间】:2014-12-20 17:57:35
【问题描述】:

我需要将子记录添加到现有父记录。

我调用以下方法

_handler.Update(custOrder);
_handler.Save();


public TEntity Update(TEntity entity)
        {
            Entities.Attach(entity);
            DataContext.Entry(entity).State = EntityState.Modified;
            return entity;
        }

  public void Save() {
            try
            {
                base.SaveChanges();
            }
            catch (Exception e) { }
        }

custOrder 包含父记录(已存在)和需要添加的新子记录。例如。为现有订单添加订单商品。

但是,当我执行此操作时,不会添加孩子。

我不确定如何指定父级没有更改但添加了一个子级

请指教。

【问题讨论】:

  • 您是否在同一上下文中执行您的Update 和您的Save
  • 是的,我使用 save 来保存多笔交易,当我添加带有物品的新订单时它工作正常
  • 我不是这个意思。您在Update 方法中使用的DataContext:与在其上运行Save 的上下文是否相同?
  • 我不确定如何指定父级没有更改但添加了一个子级
  • 是的,上下文相同

标签: c# entity-framework


【解决方案1】:

我终于得到了答案,不得不承认这有点微妙,需要添加父实体而不是附加,然后将状态设置为修改。

 public TEntity Update(TEntity entity)
        {
            Entities.Add(entity);
            DataContext.Entry(entity).State = EntityState.Modified;
            return entity;
        }

【讨论】:

  • 很好的答案!为什么有人反对它?效果很好。
【解决方案2】:

您需要告诉 EF 实际上添加了子元素本身。当 EntityState 设置为 Modified 时,它不会从父级假定需要添加某些内容。您需要将该新子记录添加到上下文中,然后运行保存。

假设OrderItem class 是您的孩子:

dbContext.OrderItems.Add(myNewOrderItem);
dbContext.SaveChanges();

【讨论】:

  • 我可以使用这些方法(修改Update方法)或者我需要引入什么。
  • 我可以用通用的方式来处理任何类型的父子对象吗?
  • 你应该可以,但除非我知道更多关于你目前如何做你其他人的事情,否则我不知道如何帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多