C# 带有.Net Framework EF6存储库的.Net Core 2.1-用于';MethodCallTranslator';抛出异常

C# 带有.Net Framework EF6存储库的.Net Core 2.1-用于';MethodCallTranslator';抛出异常,c#,entity-framework,C#,Entity Framework,我有一个ASP.NETCore2.1项目,我想使用一个.NETFramework4.7实体框架6存储库。我相信,按照这里的说明,这是可能的: 我在项目中遵循了这些步骤,并在Startup.cs文件(NetCore21)中创建了作用域EF6上下文,我正在使用DI访问我的存储库类(NetFx 4.7)中的上下文 但是,当我运行项目并执行以下查询时: var student = await _context.Students.FirstOrDefaultAsync(m => m.ID == i

我有一个ASP.NETCore2.1项目,我想使用一个.NETFramework4.7实体框架6存储库。我相信,按照这里的说明,这是可能的:

我在项目中遵循了这些步骤,并在Startup.cs文件(NetCore21)中创建了作用域EF6上下文,我正在使用DI访问我的存储库类(NetFx 4.7)中的上下文

但是,当我运行项目并执行以下查询时:

var student = await _context.Students.FirstOrDefaultAsync(m => m.ID == id);
我得到了一个关于缺少参数“key”的异常。然而,我不知道如何计算出这是指什么?我想知道调试这样的异常的最佳方法是什么

引发异常:中的“System.TypeInitializationException” EntityFramework.SqlServer.dll

System.TypeInitializationException:的类型初始值设定项 “MethodCallTranslator”引发了异常。--> System.ArgumentNullException:值不能为null。参数名称: keyat System.Collections.Generic.Dictionary
2.TryInsert(TKey,
TValue值,InsertionBehavior)位于
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.InitializeMethodTranslators()
在
System.Data.Entity.Core.Objects.elink.ExpressionConverter.MethodCallTranslator..cctor()
---内部异常堆栈跟踪的结尾---位于System.Data.Entity.Core.Objects.Elink.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter
父级,MethodCallExpression(linq)位于
System.Data.Entity.Core.Objects.elink.ExpressionConverter.TranslateExpression(表达式
林克)在
System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.Convert()
在 System.Data.Entity.Core.Objects.elink.elinkQueryState.GetExecutionPlan(可空 forMergeOption)在 System.Data.Entity.Core.Objects.ObjectQuery
1.c\u DisplayClass7.b\u 6()
在
System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func
1 func,IDbExecutionStrategy executionStrategy,布尔值 startLocalTransaction,布尔releaseConnectionOnSuccess)位于 System.Data.Entity.Core.Objects.ObjectQuery
1.c\u DisplayClass7.b\u 5()
在
System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func
1 操作)在 System.Data.Entity.Core.Objects.ObjectQuery
1.GetResults(可为null
1 forMergeOption)在 System.Data.Entity.Core.Objects.ObjectQuery
1.b__0()
位于System.Data.Entity.Internal.LazyEnumerator的
System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable
1源代码,
布尔值(找到(&F)位于
System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 source)
位于System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1源)


对于那些试图在.NetCore 3.1中使用基于EDMX的EF6.3+的用户来说,这是一个问题。是的,下面的链接中提到的对.Netcore 3.1的EF 6.3+的支持是正确的

但是,就像下面的博客一样,也提到了这个限制。限制之一是不能在.NETCore中使用基于EDMX的EF6。

这是博客的链接。

如果仍要使用.Net Core 3.1,有两个选项,可以将基于EDMX的EF6转换为基于代码的EF6。另一个选择是将EF6转换为EF Core


我最终将我们的数据项目从EF6转换为EFcore,因为我们只在EDMX模型构建中使用EF6。另外,由于其性能和API库,EFCore比EF6要好得多。这绝对值得迁移。

您正在使用的链接既没有wait也没有async。要多久才能得到例外。想知道连接是否超时,或者您刚刚收到响应。我怀疑您在处理之前没有返回整个响应。我在没有async/await的情况下尝试了它,但得到了相同的异常。异常会立即引发,当我运行SQL Profiler时,我看到SQL Server上没有执行任何查询。另外请注意。连接字符串工作正常,因为如果我将其设置为无效的连接字符串,我会正确地得到“基础提供程序在打开时失败”。EF解释查询时似乎存在一些问题。您连接到的服务器错误。通常是由于使用了附加数据库(localdb)。LocalDb是未连接到SQL Server的mdf文件。从连接字符串中删除附加数据库。将数据库连接到服务器时,可以通过SQLServerManagementStudio登录窗口上的服务器/实例进行访问。当mdf文件附加到服务器时,服务器拥有该文件,您无法直接连接到该文件。连接字符串正确,相同的连接字符串在使用EF6的独立.Net Framework项目中使用时可以正常工作。它没有使用本地数据库,它连接到一个实际的SQL Server。嘿!这只是一个猜测,但你似乎与你发布的博客有关联。不,我没有发布那个博客,我是从微软的文档中获得这个博客的。