Skip to main content
 首页 » 编程设计

c#之在调用 SaveChanges 之前从 EF 集合中获取对象

2024年02月13日29虾米姐

使用 Entity Framework ,我有一个名为 WorkSet 的表。我向其中添加一个项目,如下所示:

_entity.WorkSet.AddObject( new WorkSet() { Name = "Something" } ); 

在此之后查询表时,我没有收到任何结果。

_entity.WorkSet.Count() == 0 // always true 

也就是说,直到我调用 SaveChanges。我理解为什么这是它的工作方式,但我想知道如何在通过 SaveChanges 将它们保存到数据库之前查看实体中的更改。我希望这是一个可以快速解决的简单问题。谢谢!!

请您参考如下方法:

_entity.WorkSet 实现了IQueryable,因此调用Count() 将导致一个sql 查询。在您调用 SaveChanges 之前,数据库中没有任何记录,因此它将返回 0。 如果您想在保存更改之前引用添加的对象,请使用此代码:

_entity.WorkSet.Context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Where(e => e.Entity is WorkSet).Select(e => e.Entity as WorkSet).Count(); 

我想,您使用的是 EF 1,如果您移动到较新的版本,则有一个更简单的解决方案:

_entity.WorkSet.Local.Count();