C# 反映ObjectContext中的所有更改,而不保留到数据库

C# 反映ObjectContext中的所有更改,而不保留到数据库,c#,linq,oracle,entity-framework,objectcontext,C#,Linq,Oracle,Entity Framework,Objectcontext,因为ObjectContext.SaveChanges()发生在一个事务中,所以我决定,在调用SaveChanges()一次将数据写入数据库之前,我的应用程序最好先对ObjectContext执行所有查询/更新 但是,这样做意味着,如果我创建一个对象并随后查询ObjectContext,它会否认它的存在(可能是因为数据库尚未更新)。我想我可以和一些人一起解决这个问题,但看起来我做不到 我基本上希望ObjectContext像一个代理一样,我可以修改它,因为我希望一次提交所有内容。有什么方法可以实

因为
ObjectContext.SaveChanges()
发生在一个事务中,所以我决定,在调用
SaveChanges()
一次将数据写入数据库之前,我的应用程序最好先对
ObjectContext
执行所有查询/更新

但是,这样做意味着,如果我创建一个对象并随后查询
ObjectContext
,它会否认它的存在(可能是因为数据库尚未更新)。我想我可以和一些人一起解决这个问题,但看起来我做不到


我基本上希望
ObjectContext
像一个代理一样,我可以修改它,因为我希望一次提交所有内容。有什么方法可以实现这一点吗?

如果不保存更改,则新对象在数据库中不存在,并且对数据库执行的任何查询(=无Linq到实体查询)都不会返回它们。要获取添加到上下文但尚未保存的对象,必须查询
ObjectStateManager

var data = context.ObjectStateManager
                  .GetObjectStateEntries(EntityState.Added)
                  .Where(e => !e.IsRelationship)
                  .Select(e => e.Entity)
                  .OfType<YourEntityType>();
var data=context.ObjectStateManager
.GetObjectStateEntries(EntityState.Add)
.其中(e=>!e.IsRelationship)
.选择(e=>e.Entity)
.of type();

在类似的情况下,我不得不按照这些思路做一些事情:

给定一个键和值列表,其中一些键是新的,并且希望在单个
SaveChanges
中更新/插入键和值,我首先下拉所有现有键,然后维护一个单独的
键集合,包括新键
,该集合从仅包含现有键开始,但也会获得添加到其中的任何新创建的密钥

然后,当我查找与值关联的键对象时,我会查找
键IncludingNewones
,而不是查询上下文,因为(正如您所发现的)上下文在
保存更改之前不知道新键

您应该相对容易记住“待定添加”对象;如果不是,你可能有一个太长的生存环境,这通常会造成它自己的问题