我想了解,使这个代码,我从另一个问题SO解除工作机制:ObjectStateManager.GetObjectStateEntries()。Select()。OfType()如何工作?
List<ResourceType> ResourceTypes2 =
this.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Select(entry => entry.Entity)
.OfType<ResourceType>().ToList();
是一个对象的查询或查询EF上面?
我问的原因是我用它存储> 100K行的表,我想确保它不必做某种行枚举。
作为一个侧面的问题,我有什么想法使用上述机制来实现一个Upsert工具,该工具通过让客户端代码简单地删除然后添加到上下文中,但在保存时比较删除和添加以实现更新该行已经存在?这将是一个“模式”,上下文被放入以避免副作用的语义。
对于内存中ObjectContext/StateManager数据结构上的对象(因为它不像@ rich.okelly的答案中所解释的那样是'IQueryable')并且不会发出任何数据库查询。对于你的“Upsert”理念:我不认为该程序有什么好处,并且会说:不要保护客户不理解如何正确使用EF。如果他们需要更新,他们应该使用该机制(从DB/Attach/ApplyCurrentValues加载/更改跟踪等),而不是调用笨拙的DeleteObject/AddObject对。 – Slauma
也许我错过了一些东西 - 我似乎是唯一一个我知道的厌恶输入代码反复,看看是否已经存在一个对象,并添加它,如果是这样,并更新它明智....这是繁琐的样板, 对? –