Этот вопрос уже существует here, но для Entity Framework для TsqlДублированный присоединяется Npgsql для того же свойства навигации
при использовании той же свойство навигации несколько раз на избранных, результаты запроса Npgsql в нескольких соединений, один для каждого использование навигационного свойства. Этот результат в хите ужасных производительностей (проверено)
Я читал, что это проблема с EF 4, но эта проблема также возникает на EF 6.
Я думаю, что это проблема с Npgsql LINQ к SQL переводчику
Это код, который Npgsql генерировать для того же свойства навигации использовали mutliple раз, очевидно, только один присоединиться к необходимости (копируется из других вопросов, потому что это именно тот самый случай)
LEFT OUTER JOIN [dbo].[Versions] AS [Extent4] ON [Extent1].[IDVersionReported] = [Extent4].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent5] ON [Extent1].[IDVersionReported] = [Extent5].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent6] ON [Extent1].[IDVersionReported] = [Extent6].[ID]
LEFT OUTER JOIN [dbo].[Versions] AS [Extent7] ON [Extent1].[IDVersionReported] = [Extent7].[ID]
Можно ли настроить PostgreSql для оптимизации повторных соединений?
Если нет, то какой вариант лучше всего подходит для решения этой проблемы?
- Подождите, пока Npgsql фиксируется
- Скачать Npgsql код и найти способ исправить это
- Intercept генерируется SQL до достижения базы данных, разобрать его и удалить дубликаты соединений. (Read here)
- Не используйте навигационные свойства, использовать LINQ присоединяется вместо
Я думаю, что вы правы, это на уровне перевода запросов NPGSQL для EF, хотя я лично этого не заметил. По крайней мере, зарегистрируйте проблему здесь: https://github.com/npgsql/Npgsql/issues. Было бы здорово, если бы вы могли это исправить, но я подозреваю, что это не так. Я думаю, что это, вероятно, хорошее место для начала в коде, вы захотите его построить и присоединить к нему, чтобы вы могли видеть, что происходит. https://github.com/npgsql/npgsql/blob/master/src/EntityFramework6.Npgsql/SqlGenerators/SqlBaseGenerator.cs # L424 –
Команда Npgsql только что закрыла проблему, она швыряет ее на стороне Entity Framework. благодаря – rafael