更新实体框架中的分离实体

时间:2017-07-25 17:14:26

标签: c# entity-framework

从DB加载父项,然后关闭上下文。在处理完这些父母的某些时候(给孩子添加玩具,玩具可以在孩子之间分享:多对多的关系),他们需要更新,每一个只更新一次。

public class Parent
{
    public int ParentId { get; set; }
    public virtual List<Child> Children { get; set; }
}

public class Child
{
    public int ChildId { get; set; }

    public int ParentId { get; set; }
    public virtual Parent Parent { get; set; }

    public virtual List<Toy> Toys { get; set; }
}

public class Toy
{
    public int ToyId { get; set; }

    public virtual List<Child> Child { get; set; }
}

他们有其他属性,但只插入每个孩子的玩具。然后父母在DB中更新。

public void UpdateParents(List<Parent> parents)
{
    using (var ctx = new Context())
    {
        foreach (var parent in parents)
        {
            parent.Children.ForEach(c => c.Toys.ForEach(
                t => ctx.Entry(t).State = EntityState.Added));

            ctx.Parents.Attach(parent);
            ctx.Entry(parent).State = EntityState.Modified;
        }

        ctx.SaveChanges();
    }
}

更新方法有效,但可能比此过程慢。但是,当我尝试执行该方法的次数更多时,它的行为与首次运行时不同。以下每次运行都不会插入任何新玩具,而是复制所有父母的孩子。

是否有更好更正确(更新更多次)的方式来做我需要的事情?

编辑:将孩子的状态更改为修改并修复我的重复问题

ctx.Entry(c).State = EntityState.Modified;

0 个答案:

没有答案