Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在调用SaveChanges之前从EF集合获取对象_C#_.net_Entity Framework - Fatal编程技术网

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

C# 在调用SaveChanges之前从EF集合获取对象,c#,.net,entity-framework,C#,.net,Entity Framework,使用实体框架,我有一个名为WorkSet的表。我向其中添加一项,如下所示: _entity.WorkSet.AddObject( new WorkSet() { Name = "Something" } ); 当我在此之后查询表时,我没有收到任何结果 _entity.WorkSet.Count() == 0 // always true 也就是说,直到我调用SaveChanges。我理解为什么它是这样工作的,但我想知道在通过SaveChanges将更改持久化到数据库之前,如何在实体中看到更改

使用实体框架,我有一个名为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 entries = context.ObjectStateManager
                     .GetObjectStateEntries(EntityState.Added)
                     .Where(entry => entry.Entity.GetType() == typeof(WorkSet));
为此,请使用ObjectContext.SavingChanges事件。在事件处理程序中,检查通过查看ObjectStateManager添加或修改的实体,这些实体将被保存

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
如果处理的是DbContext,请使用以下代码从中获取ObjectContext:

使用以下代码获取新添加的工作集:

var entries = context.ObjectStateManager
                     .GetObjectStateEntries(EntityState.Added)
                     .Where(entry => entry.Entity.GetType() == typeof(WorkSet));
_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();
_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();

但这能实现什么呢?在保存之前,我需要在各个点查看对象。实体保存时,我无法将我的操作作为回调的一部分执行。因此,在需要查看更改时,只需使用以下代码:context.ObjectStateManager.getobjectstatentriesentityState.Added | EntityState.modifiedb,但这将为我提供所有更改项的集合。我需要一种简洁的方式来访问刚刚添加到特定集合中的项。var entries=context.ObjectStateManager.GetObjectStateEntriesEntityState.added.Whereentry=>entry.Entity.GetType==typeofWorkSet;您添加的工作集谢谢,我希望它会更简单一点,但这足以满足我的需要。谢谢但这能实现什么呢?在保存之前,我需要在各个点查看对象。实体保存时,我无法将我的操作作为回调的一部分执行。因此,在需要查看更改时,只需使用以下代码:context.ObjectStateManager.getobjectstatentriesentityState.Added | EntityState.modifiedb,但这将为我提供所有更改项的集合。我需要一种简洁的方式来访问刚刚添加到特定集合中的项。var entries=context.ObjectStateManager.GetObjectStateEntriesEntityState.added.Whereentry=>entry.Entity.GetType==typeofWorkSet;您添加的工作集谢谢,我希望它会更简单一点,但这足以满足我的需要。谢谢添加了什么版本?EF 4.1谢谢,我一定会查出来的。但就目前而言,你和安德鲁发布的内容足以让我过关。谢谢添加了什么版本?EF 4.1谢谢,我一定会查出来的。但就目前而言,你和安德鲁发布的内容足以让我过关。谢谢