如何在EF中进行批量更新

3

我在一个WCF服务上有以下方法:

    /// <summary>
    /// Receives the result of a request processing
    /// </summary>
    /// <param name="results">The resulting statuses for the processed account requests</param>
    /// <returns>Whether the response was successfully handled</returns>
    public bool SendRequestProcessingResult(IEnumerable<RequestProcessingResult> results)
    {
        foreach (var result in results)
        {
            // update entity
        }
    }

有没有一种方法可以同时更新所有实体?我应该只是添加每个更新然后SaveChanges吗?在EF 4.1中进行这种“批量”更新的最佳方法是什么?

1个回答

5

我只需添加每个更新,然后SaveChanges吗?

是的。

请注意,EF是一个ORM,因此并不真正为这种大批量更新(从性能上讲)而设计。如果您需要更多的性能,您基本上要编写一批SQL语句并以传统方式执行它们。

大多数人(我指除Facebook、Twitter等之外的人)通常不会遇到您所建议的问题,而且您越接近底层,代码意图就越容易在所有技术实现中丢失。

重要的是强调,除非您已经衡量过并发现其不足,否则无需改进代码的性能。首先为正确性、可读性和维护性编写代码,然后测量性能并在必要时进行有针对性的改进。


当然,我会更新并执行“SaveChanges”。但是大多数情况下,当我遇到不确定的情况时,我会来Stack Overflow上询问是否正确。 :) - bevacqua
确实。说实话,没有一种正确的方法。我非常确定这不是大量批量更新的“正确方式”,特别是在性能可能成为问题的情况下。然而,如果代码可读性比节省几毫秒(甚至整个秒数)更重要,那么这种方法就可以了。 - Neil Barnwell
无论如何,这都是假设性的,每次我可能有0、1或者10个项目需要更新。但也许有更好的方法。 :) - bevacqua
说实话,除非我们谈论数千个,否则你不应该真正感到任何痛苦。 - Neil Barnwell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接