由于ObjectContext.SaveChanges()
发生在事务中,我认为最好让我的应用首先在ObjectContext
上执行所有查询/更新,然后再调用SaveChanges()
一次将数据写入数据库中。
但是这样做意味着如果我创建一个对象并且后续查询ObjectContext
它会拒绝它存在(因为数据库尚未更新)。我以为我可以使用SaveOptions中的一些来解决这个问题,但它看起来不像我。
我基本上希望ObjectContext
充当代理,我可以修改,因为我希望一次性提交。有没有办法实现这个目标?
答案 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
。
你应该相对容易记住你的“待定添加”对象;如果不是这样,你可能会有一个过长的背景,这通常会产生自己的问题。