IDbSet.Add和DbEntityEntry.State = EntityState.Added有什么区别?

时间:2012-01-31 16:15:19

标签: c# entity-framework-4.1 dbcontext

在EF 4.1+中,这两行代码之间有区别吗?

dbContext.SomeEntitySet.Add(entityInstance);
dbContext.Entry(entityInstance).State = EntityState.Added;

或者他们做同样的事情?我想知道是否可能会影响子集合/导航属性与另一种不同。

2 个答案:

答案 0 :(得分:20)

当您使用dbContext.SomeEntitySet.Add(entityInstance);时,此状态及其所有相关实体/集合都设置为已添加,而dbContext.Entry(entityInstance).State = EntityState.Added;也会将所有相关实体/集合添加到上下文中,但会将其保留为未修改状态。 因此,如果您尝试创建的实体具有相关实体(并且其值不为空),则在使用“添加”时,将为该子实体创建新对象,而使用其他方式则不会。

答案 1 :(得分:1)

我刚用EF 6测试了这个,带有相关的实体/导航属性,在这两种情况下,创建的对象都是相同的。 (创建了所有父对象和相关子对象。)我注意到的唯一区别是Add的速度提高了大约2倍。我的数据有1000个父对象,每个对象有5个子对象,总共有6000个对象写入DB