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