使用实体框架,我有一个名为WorkSet
的表。我按如下方式添加了一个项目:
_entity.WorkSet.AddObject( new WorkSet() { Name = "Something" } );
当我在此之后查询表格时,我没有收到任何结果。
_entity.WorkSet.Count() == 0 // always true
也就是说,直到我致电SaveChanges
。我理解为什么这是它的工作方式,但我想知道在通过SaveChanges
将它们持久化到数据库之前,我如何看到实体中的更改。我希望这是一个可以快速解决的简单问题。谢谢!
答案 0 :(得分:2)
为此目的使用ObjectContext.SavingChanges
事件。在事件处理程序中检查已通过查看ObjectStateManager
添加或修改的实体,这些是将要保存的实体。
context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
如果是您要处理的DbContext
,请使用以下代码从中获取ObjectContext
:
var adapter = (IObjectContextAdapter)dbContext;
var objectContext = adapter.ObjectContext;
使用以下代码获取新添加的工作集:
var entries = context.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Where(entry => entry.Entity.GetType() == typeof(WorkSet));
答案 1 :(得分:2)
_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();