Элемент с таким же ключом уже был добавлен ошибка в ASP. NET MVC 5 - PullRequest
0 голосов
/ 19 февраля 2020

Я обновляю проект ASP. NET MVC 3 до MVC 5 (VS 2017), и у меня есть строка кода ниже

 IEnumerable<Country> countrydata = _db.Country.OrderBy(s => s.CountryName).ToList();

Эта строка кода отлично работает в MVC 3 (в проекте *. 1036 * 4), но выдает ошибку ниже в MVC 5. Ориентация проекта. NET 4.6.1, кто-нибудь видит почему?

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

ОБНОВЛЕНИЕ: После дальнейшего тестирования кажется, что все такие вызовы базы данных потерпят неудачу в MVC 5 / Entity Framework 6, потому что даже приведенная ниже строка завершается с тем же сообщением об ошибке.

IEnumerable<AuthenticationType> authenticationProvider = _db.AuthenticationType.OrderBy(n => uthenticationProvider).ToList();

@ Christos, см. Сообщение конструктора .edmx, которое я упоминаю ниже

enter image description here

Ниже приведена трассировка стека

в System.ThrowHelper.ThrowArgumentException (ресурс ExceptionResource) в System.Collections.Generi c .Dictionary 2.Insert(TKey key, TValue value, Boolean add) at System.Data.Metadata.Edm.ObjectItemAttributeAssemblyLoader.LoadRelationshipTypes() at System.Data.Metadata.Edm.ObjectItemAttributeAssemblyLoader.LoadTypesFromAssembly() at System.Data.Metadata.Edm.ObjectItemAssemblyLoader.Load() at System.Data.Metadata.Edm.ObjectItemAttributeAssemblyLoader.Load() at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, ObjectItemLoadingSessionData loadingData) at System.Data.Metadata.Edm.AssemblyCache.LoadAssembly(Assembly assembly, Boolean loadReferencedAssemblies, KnownAssembliesSet knownAssemblies, EdmItemCollection edmItemCollection, Action 1 logLoadMessage, Object & loaderCook ie, Словарь 2& typesInLoading, List 1 & error) в System.Data.Metadata.Edm.ObjectItemCollection.LoadAssem blyFromCache (ObjectItemCollection objectItemCollection, сборка сборка, булевы loadReferencedAssemblies, EdmItemCollection edmItemCollection, Action`1 logLoadMessage) в System.Data.Metadata.Edm.ObjectItemCollection.ImplicitLoadAssemblyForType (типа Type, EdmItemCollection edmItemCollection) в System.Data.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType (Тип type, Assembly вызывая Assembly) в System.Data.Objects.ObjectContext.GetTypeUsage (Тип entityCLRType) в System.Data.Objects.ObjectContext.GetEntitySetForNameAndType (String entitySetName, Type entityCLRType, Тип объектаNjectOject.OjectBject. CreateObjectSet [TEntity] (String entitySetName) в SSAMapper.Models.SSAMapperEntities.get_Country () в D: \ Projects \ SSAMapper \ Models \ SSAMapper.Designer.cs: строка 240 в SSAMapper.Models.AdminModel.GetCountle Boost ( , Boolean loadDeactivationCountry) в D: \ Projects \ SSAMapper \ Models \ AdminModel.cs: строка 1116

1 Ответ

0 голосов
/ 21 февраля 2020

Я склоняюсь к тому, что обновление до Entity Framework 6 пошло не так. Он использует отложенную загрузку, и вы удалили .ToList(), поэтому перед любым доступом к данным выдается исключение. Мы можем видеть в трассировке стека это во время создания ObjectSet<TEntity>, и, если я правильно понимаю, похоже, что при просмотре отношений проверяется, загружена ли сборка для их типов.

Я бы посмотрел <NavigationProperty> на концептуальной модели в .edmx и выяснил, есть ли какие-либо дубликаты. Кажется, что это также может произойти, если у вас есть дублированные классы моделей в вашем проекте или если какой-либо из классов моделей определен в нескольких сборках в вашей корзине (например, если вы переименовали свою сборку проекта / цели, но оригинальная dll все еще там) ).

Вот пара ссылок, которые могут быть полезны: Обновление до Entity Framework 6 Я бы go прошел через это и убедился, что ничего не пропущено. И здесь был вопрос с той же ошибкой с указанным исходным кодом.

...