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

0 ответов

Другие вопросы по тегам