LinqPad Исключение для базового c запроса: элемент с таким же ключом уже добавлен - PullRequest
1 голос
/ 20 февраля 2020

Я подключаюсь к Oracle БД с помощью LinqPad, и по большей части она работает нормально, но для некоторых таблиц я получаю сообщение об ошибке:

ArgumentException: элемент с тем же ключом уже был добавлен

Я достаточно хорошо понимаю концепцию отдельных ключей в словаре; я не понимаю, как это требование нарушается здесь.

Например, я могу запустить следующие как SQL из LinqPad без проблем:

Select * from table_name where rownum < 10

.. но если я попытаюсь запустить это как C# выражение , тогда я получаю ошибку выше.

TableNames.Take(10);

Просто чтобы прояснить: OtherTables.Take(10); отлично работает для многих других таблиц; вышеуказанная ошибка возникает только для их подмножества.

Предварительные теории

  • Сначала я подумал, что это может быть связано со столбцом в таблице, имя которого конфликтует с именем таблицы.

    Пример: Таблица table_name, содержащая столбец table_name_s, будет сопоставлена ​​с сущностью Linq TableNames со свойством TableNameS. Я подумал, что здесь может быть какой-то конфликт между TableNames и TableNameS внутри LinqPad, но это, по крайней мере, непоследовательная ошибка, поскольку существуют другие таблицы с такими же схемами именования, которые не вызывают таких ошибок.

  • Другая теория заключается в том, что это может как-то быть связано с драйвером, который я использую для подключения к Oracle, но это только догадка (я использую кастом Драйвер «IQ», который поддерживает Oracle, MySql и SQLite).

Любые идеи о том, как устранить эту ошибку и избежать ее, а также получить доступ к содержимому таблицы с помощью Linq?


Обновление: Трассировка стека от LinqPad, как и было запрошено.

Что касается другого комментария: Как я уже отмечал, я понимаю root причина (повторяющееся значение ключа), но не то, откуда оно исходит. Выражение SomeTable.Take(10); представляет собой , по сути, весь запрос, только с другим именем таблицы.

ved System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
ved System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
ved System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
ved System.Linq.Enumerable.ToDictionary[TSource,TKey](IEnumerable`1 source, Func`2 keySelector)
ved IQToolkit.Data.Mapping.AttributeMapping.AttributeMappingEntity..ctor(Type elementType, String tableId, Type entityType, IEnumerable`1 attrs, IEnumerable`1 mappingMembers)
ved IQToolkit.Data.Mapping.AttributeMapping.CreateEntity(Type elementType, String tableId, Type entityType)
ved IQToolkit.Data.Mapping.AttributeMapping.GetEntity(Type elementType, String tableId, Type entityType)
ved IQToolkit.Data.Mapping.AttributeMapping.GetEntity(Type type, String tableId)
ved IQToolkit.Data.EntitySession.GetTable(Type elementType, String tableId)
ved IQToolkit.Data.EntitySession.GetTable[T](String tableId)
ved IQDriver.IQContextBase.GetTable[T](String name)
ved LINQPad.User.TypedDataContext.get_Phases()
ved UserQuery.RunUserAuthoredQuery() i C:\Users\MyUserName\AppData\Local\Temp\LINQPad5\_jpjdzkge\query_gktujz.cs:linje 36
ved LINQPad.ExecutionModel.ClrQueryRunner.Run()
ved LINQPad.ExecutionModel.Server.RunQuery(QueryRunner runner)
...