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

问题描述 投票:0回答:2

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

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

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

c# entity-framework-4.1 dbcontext
2个回答
21
投票

编辑:此答案适用于 EF5 或更少

当您使用

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.