IDbSet.Add和DbEntityEntry.State=EntityState.Addd之间有什么区别

本文关键字:之间 Addd 什么 区别 EntityState Add DbEntityEntry State IDbSet | 更新日期: 2023-09-27 18:21:57

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

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

还是他们做同样的事情?我想知道其中一个对子集合/导航属性的影响是否与另一个不同。

IDbSet.Add和DbEntityEntry.State=EntityState.Addd之间有什么区别

当您使用dbContext.SomeEntitySet.Add(entityInstance);时,此实体及其所有相关实体/集合的状态设置为已添加,而dbContext.Entry(entityInstance).State = EntityState.Added;也将所有相关实体或集合添加到上下文中,但保留为未修改状态。因此,如果你试图创建的实体有一个相关的实体(它的值不为null),当你使用Add时,它会为该子实体创建一个新对象,而另一种方式则不会。

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