在EF 4.1+中,这两行代码之间有区别吗?
dbContext.SomeEntitySet.Add(entityInstance);
dbContext.Entry(entityInstance).State = EntityState.Added;
或者他们做同样的事情?我想知道是否可能会影响子集合/导航属性与另一种不同。
答案 0 :(得分:20)
当您使用dbContext.SomeEntitySet.Add(entityInstance);
时,此状态及其所有相关实体/集合都设置为已添加,而dbContext.Entry(entityInstance).State = EntityState.Added;
也会将所有相关实体/集合添加到上下文中,但会将其保留为未修改状态。
因此,如果您尝试创建的实体具有相关实体(并且其值不为空),则在使用“添加”时,将为该子实体创建新对象,而使用其他方式则不会。
答案 1 :(得分:1)
我刚用EF 6测试了这个,带有相关的实体/导航属性,在这两种情况下,创建的对象都是相同的。 (创建了所有父对象和相关子对象。)我注意到的唯一区别是Add的速度提高了大约2倍。我的数据有1000个父对象,每个对象有5个子对象,总共有6000个对象写入DB