ObjectStateManager.GetObjectStateEntries()。Select()。OfType()是如何工作的?

时间:2011-11-04 17:31:00

标签: c# entity-framework

我试图理解使我从另一个SO问题解决的代码工作的机制:

        List<ResourceType> ResourceTypes2 =
            this.ObjectStateManager
                .GetObjectStateEntries(EntityState.Added)
                .Select(entry => entry.Entity)
                .OfType<ResourceType>().ToList();

以上是对象查询还是EF查询?

我问的原因是我正在使用一个存储&gt;的表格。 100K行,我想确保它不必进行某种行枚举。

作为一个侧面问题我有什么想法使用上述机制来实现一个Upsert工具,它通过让客户端代码简单地删除然后添加到上下文,但在保存时,将删除与添加的比较实现更新,其中行已经存在?将上下文放入“模式”以便不具有副作用的语义。

1 个答案:

答案 0 :(得分:1)

它在很大程度上取决于this.ObjectStateManager的返回类型                 .GetObjectStateEntries(EntityState.Added)

如果它返回一个IEnumerable,任何后续操作都将使用LinqToObjects实现,而如果它返回一个IQueryable,你将使用EF实现。

就个人而言,我不喜欢自定义Upsert机制的想法,因为它会使希望将来开发代码的人的学习曲线变得陡峭,但这只是我的意见。关于该机制的利弊的讨论,我建议在讨论部分提出单独的问题或帖子。

希望这有帮助。