Z.Entity.Plus Ошибка обновления с дублем
Следующий код работает (Where-Statement) для обновления 1000 "Artikels" в нашей базе данных:
context.Artikel.Where(x => x.ArtikelId < 1000).Update(x => new Artikel { UpdateCounter = x.UpdateCounter + 1 });
Однако эта строка (Take-Statement), использующая take вместо where, не делает:
context.Artikel.Take(1000).Update(x => new Artikel { UpdateCounter = x.UpdateCounter + 1 });
Я посмотрел на код SQL, который генерируется позади. Где-заявление:
UPDATE A
SET A.[UpdateCounter] =
B.[UpdateCounter] + 1
FROM [dbo].[Artikels] AS A
INNER JOIN ( SELECT
[Extent1].[ArtikelId] AS [ArtikelId],
[Extent1].[UpdateCounter] AS [UpdateCounter]
FROM [dbo].[Artikels] AS [Extent1]
WHERE [Extent1].[ArtikelId] < 1000
) AS B ON A.[ArtikelId] = B.[ArtikelId]
Take-Statement, включая сообщение об ошибке:
UPDATE A
SET A.[UpdateCounter] =
[c].[UpdateCounter] + 1
FROM [dbo].[Artikels] AS A
INNER JOIN ( SELECT TOP (1000)
[c].[ArtikelId] AS [ArtikelId],
[c].[UpdateCounter] AS [UpdateCounter]
FROM [dbo].[Artikels] AS [c]
) AS B ON A.[ArtikelId] = B.[ArtikelId]
-- Executing at 15.01.2018 09:42:41 +01:00
-- Failed in 1 ms with error: Der mehrteilige Bezeichner 'c.UpdateCounter' konnte nicht gebunden werden.
Извините за немецкое сообщение об ошибке. В основном это говорит о том, что c.UpdateCounter не может быть связан. Когда вы смотрите на SQL, очевидно, что это не может работать, потому что "[c]". известен только внутри внутреннего оператора выбора. Код SQL Where-Statement показывает, как он работает. Это ошибка Entity-Framework-Plus или мы неправильно используем какую-либо функцию?
Мы используем:
Версия Entity-Framework: 6.2.0
Entity-Framework-Plus.EF6 Версия: 1.7.14
MS SQL Server 2012