反映ObjectContext中的所有更改,而不持久保存到数据库

时间:2012-04-02 13:32:41

标签: c# linq oracle entity-framework objectcontext

由于ObjectContext.SaveChanges()发生在事务中,我认为最好让我的应用首先在ObjectContext上执行所有查询/更新,然后再调用SaveChanges()一次将数据写入数据库中。

但是这样做意味着如果我创建一个对象并且后续查询ObjectContext它会拒绝它存在(因为数据库尚未更新)。我以为我可以使用SaveOptions中的一些来解决这个问题,但它看起来不像我。

我基本上希望ObjectContext充当代理,我可以修改,因为我希望一次性提交。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:6)

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

var data = context.ObjectStateManager
                  .GetObjectStateEntries(EntityState.Added)
                  .Where(e => !e.IsRelationship)
                  .Select(e => e.Entity)
                  .OfType<YourEntityType>();

答案 1 :(得分:0)

在类似的情况下,我必须沿着这些方向做点什么:

给定一个键和值列表,其中一些键是新的,并且想要在单个SaveChanges中更新/插入键和值,我首先下拉所有现有键,然后保持< strong {单独 keysIncludingNewOnes的集合,它开始时仅包含现有密钥,但也会添加任何新创建的密钥。

然后,当我正在寻找一个与一个值相关联的关键对象时,我查看keysIncludingNewOnes,而不是查询上下文,因为(正如您所发现的)上下文不知道新的密钥直到SaveChanges

你应该相对容易记住你的“待定添加”对象;如果不是这样,你可能会有一个过长的背景,这通常会产生自己的问题。

相关问题