3

当我使用时,有没有办法在不提交更改的情况下将对象添加到 de dataContext

ctx.Articles.AddObject(newart);

newart 不会出现在上下文中ctx,我能够做到这一点的唯一方法是ctx.SaveChanges保存更改,不幸的是,将更改保存到数据库,我不想这样做,有没有办法做到这一点,任何帮助都会被赞赏

4

1 回答 1

4

可以在 EF4 中工作

您应该能够通过ObjectStateManager您的ObjectContext喜欢获取所有当前跟踪的对象

var articles = ctx.ObjectStateManager
                    // Get all entries for added/changed/modified entities
                    .GetObjectStateEntries(EntityState.Added |
                                           EntityState.Unchanged |
                                           EntityState.Modified)
                    // select the entity objects from the entries
                    .Select(entry=>entry.Entity)
                    // we're only interested in Article objects
                    .OfType<Article>();

注意:由于我尚未安装 EF4,因此无法验证此解决方案。但我记得前段时间我成功地做到了这一点:)。但是,当处理非常大的对象集时,它可能不是很高效......

适用于 EF 5

您可以使用类的Local属性DbSet。此属性表示当前由 Context 跟踪的对象(即当前加载和/或本地添加但未删除的所有对象)。访问该Local属性永远不会进行数据库查询。

因此,您可以使用ctx.Articles.Local并获取包含您的newart对象的数据集(以及先前查询加载的任何对象)

于 2012-12-09T12:04:28.460 回答