从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;