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

dan*_*wig 15 c# entity-framework-4.1 dbcontext

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

dbContext.SomeEntitySet.Add(entityInstance);
dbContext.Entry(entityInstance).State = EntityState.Added;
Run Code Online (Sandbox Code Playgroud)

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

fbi*_*agi 20

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

  • 对不起,但事实并非如此(对于EF 6,但我认为自从引入"DbSet"以来的任何版本).如果这些条目尚未附加到上下文*,则两种方法都将对象图中的*all*实体标记为"已添加"*.因此,重要的不是添加方法,而是添加根实体之前的子实体的状态. (5认同)