是否可以在 MS Entity Framework 中查询新添加的对象

Posted

技术标签:

【中文标题】是否可以在 MS Entity Framework 中查询新添加的对象【英文标题】:Is query to new added object possible in MS Entity Framework 【发布时间】:2010-09-24 11:32:36 【问题描述】:

有没有办法在实体框架中查询或访问新添加的对象(使用 ObjectContext.AddObject 方法)?我的意思是尚未使用 SaveChanges 将其保存到数据存储的情况

我了解查询已转换为底层 SQL 并针对数据存储执行,但它还没有这个新对象。但无论如何,我很好奇 - 如果没有官方支持,也许理论上是可能的。如果不是,开发人员如何处理它?手动跟踪新对象并使用 Linq to objects 查询它们?

同样的问题也适用于 LinqToSql。

【问题讨论】:

【参考方案1】:

在 EF 中,如果您使用此代码,您将拥有已在上下文中加载的所有实体(包括新添加的实体):

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Select(o => o.Entity).OfType<YourObjectType>()

【讨论】:

谢谢,我不再使用 EF,但希望这很有用。【参考方案2】:

“同样的问题也适用于 LinqToSql。”

对于 LINQ-to-SQL,请查看DataContext.GetChangeSet();这有3 separate collections 用于待处理的.Inserts.Updates.Deletes

请注意,ChangeSet 是调用 GetChangeSet() 方法时的快照;您需要重新查询才能看到任何其他更改。

【讨论】:

以上是关于是否可以在 MS Entity Framework 中查询新添加的对象的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Entity Framework Code First 设置唯一约束?

如何将 Entity Framework Code First 与现有的 MS Access (.accdb) 数据库一起使用?

Entity Framework 5/6 中的可更新视图

是否可以在 Code First Entity Framework 中使用 JSON 文件作为后端存储?

在entity framework中,DbContext是否需要手动Dispose ?

Entity Framework 4 表值函数