在WindowsPhone上使用Linq to SQL是否可以提高批量删除的性能?

Is it possible to improve the performance of batch deletions when using Linq to SQL on Windows Phone?

我在 Windows Phone 应用程序中使用 Linq-to-SQL 在超出 network/Wi-Fi 覆盖范围时充当缓存。这一切都很好,但我发现从缓存中删除陈旧的条目似乎使用了很多单独的语句。

考虑清除 table 的(相对微不足道的)案例(例如,如果最终用户选择注销):

context.CacheChecks.DeleteAllOnSubmit(context.CacheChecks);

希望生成的SQL具有以下形式(或类似的形式):

DELETE FROM CacheChecks

然而它变成更类似于:

SELECT [t0].[LastChecked], [t0].[EntityType]
FROM [CacheChecks] AS [t0]
-- @p0: Input DateTime
-- (Size = 0; Prec = 0; Scale = 0) [3/13/2008 12:00:00 AM]

DELETE FROM [CacheChecks] WHERE [EntityType] = @p0
-- @p0: Input UniqueIdentifier (Size = 0; Prec = 0; Scale = 0) [{GUID}]

DELETE FROM [CacheChecks] WHERE [EntityType] = @p0
-- @p0: Input UniqueIdentifier (Size = 0; Prec = 0; Scale = 0) [{GUID}]

-- Individual DELETE statements for each row

在桌面上,我看到了各种允许批量更新的扩展方法,似乎是based on this article by Terry Aney,但是这种方法在windows [=35]中不起作用=] 世界,因为无法为给定的上下文创建任意 DbCommand

是否有另一种方法可以比逐行更有效地批量删除多行(1,000 行)?

是的,可以执行绕过查询处理器的删除,在我的测试中,删除 100 行的时间从 320 毫秒缩短到 70 毫秒。您只需在 table:

中添加一个 rowversion 列即可
[Column(IsVersion=true)] 
private Binary _version;

更多信息在这里:http://erikej.blogspot.dk/2012/04/windows-phone-local-database-tip.html