【发布时间】:2020-06-03 08:09:24
【问题描述】:
我正在将 ASP.NET MVC 3 项目升级到 MVC 5 (VS 2017),并且我有以下代码行
IEnumerable<Country> countrydata = _db.Country.OrderBy(s => s.CountryName).ToList();
这行代码在 MVC 3 中运行良好(在 .NET 4 项目中),但在针对 .NET 4.6.1 的 MVC 5 项目中抛出以下错误,有人知道为什么吗?
已添加具有相同密钥的项目
更新: 经过进一步测试,似乎所有此类对数据库的调用在 MVC 5 / Entity Framework 6 中都会失败,因为即使下面的行也会失败并显示相同的错误消息。
IEnumerable<AuthenticationType> authenticationProvider = _db.AuthenticationType.OrderBy(n => uthenticationProvider).ToList();
@Christos,请参阅我在下面提到的 .edmx 设计器消息
下面是堆栈跟踪
在 System.ThrowHelper.ThrowArgumentException(ExceptionResource 资源)在 System.Collections.Generic.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, Action1 logLoadMessage,Object& loaderCookie,Dictionary2& typesInLoading, List1& 错误)在 System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache( System.Data.Metadata.Edm.ObjectItemCollection.ImplicitLoadAssemblyForType(类型类型,EdmItemCollection edmItemCollection)在 System.Data.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType(Type类型,程序集调用Assembly) 在 System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType) 在 System.Data.Objects.ObjectContext.GetEntitySetForNameAndType(String entitySetName, Type entityCLRType, String exceptionParameterName) 在 System.Data.Objects.ObjectContext.CreateObjectSet [ TEntity](String entitySetName) 在 SSAMapper.Models.SSAMapperEntities.get_Cou D:\Projects\SSAMapper\Models\SSAMapper.Designer.cs 中的 ntry():D:\Projects\SSAMapper\Models\AdminModel 中 SSAMapper.Models.AdminModel.GetCountries(Boolean status, Boolean userCountry, Boolean loadDeactivatedCountry) 的第 240 行.cs:1116 行
【问题讨论】:
-
错误表示重复。你能指定_db_Country的内容是什么吗?
-
重复是我的第一个想法,但我检查了表格并且没有重复。我什至在代码中应用了 DISTINCT 子句,但仍然出现同样的错误。
-
您能描述一下您的表结构有何相似之处以及您的价值观是什么?另外,您能否确认对 ToList() 的调用导致崩溃?您可以尝试执行 _db.Country.OrderBy(s => s.CountryName) 以查看它是否自行工作。
-
好的。我仍然倾向于升级出错。它使用延迟加载,并且您已删除
.ToList(),因此在任何数据访问之前都会引发异常。我们可以在堆栈跟踪中看到它是在创建ObjectSet<TEntity>期间,如果我理解正确,它看起来是在查看关系以确保加载其类型的程序集时。我会查看 .edmx 中概念模型上的<NavigationProperty>s,看看是否有任何重复。如果您有重复的模型类或...,这似乎也可能发生 -
@xr280xr,升级出错绝对是唯一的解释,因为在全新的 ASP.NET MVC 5 和 Entity Framework 6 项目中,相同的代码行执行得非常好。我只需要删除搞砸的 .EDMX 文件并从升级后的项目中重新创建它,然后只需进行一些代码更改以使其与实体框架 6 兼容。
标签: asp.net-mvc-5 entity-framework-6 entity