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

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


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

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


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

最佳答案

为此目的使用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));

10-07 13:13