问题描述
我有一个 .NET Framework 4.x 类库,它利用了 Entity Framework 6。直到最近它才被用于另一个基于 4.x 的应用程序,但最近它被用于 .NET Core 3.x Azure 函数.类库中没有任何变化,除了接受 @R_502_6308@Parameter
,特别是 DbContext.Database.@R_502_6308@Query<T>()
的方法外,大多数方面似乎都按预期工作。
我遇到的问题似乎与 what happens when using EF Core with .NET Core 3.x without updating from System.Data.SqlClient
to Microsoft.Data.SqlClient
非常相似,只是它颠倒了这个问题。异常消息是:
The @R_502_6308@ParameterCollection only accepts non-null @R_502_6308@Parameter type objects,not @R_502_6308@Parameter objects.
但是,我遇到的所有文档都指出 EF 6 @H_502_14@ 与 .NET Core 3.x 兼容,但 不@H_502_14@ 与 Microsoft.Data.@R_502_6308@Client
兼容.我肯定在使用 System.Data.@R_502_6308@Client.@R_502_6308@Parameter
并且我看不到应用程序在任何地方浸入 Microsoft.Data.@R_502_6308@Client
,如此部分堆栈跟踪所示:
at System.Data.@R_502_6308@Client.@R_502_6308@ParameterCollection.ValidateType(Object value)
at System.Data.@R_502_6308@Client.@R_502_6308@ParameterCollection.AddRange(Array values)
at System.Data.Entity.Core.Objects.ObjectContext.CreateStoreCommand(String commandText,Object[] parameters)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternal[TElement](String commandText,String entitySetName,Executionoptions executionoptions,Object[] parameters)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__displayClass186_0`1.<ExecuteStoreQueryReliably>b__1()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func,IDbExecutionStrategy executionStrategy,Boolean startLocalTransaction,Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__displayClass186_0`1.<ExecuteStoreQueryReliably>b__0()
at System.Data.Entity.@R_502[email protected]@R_502[email protected][TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably[TElement](String commandText,Object[] parameters)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQuery[TElement](String commandText,Object[] parameters)
at System.Data.Entity.Internal.InternalContext.<>c__displayClass111_0`1.<Execute@R_502_6308@Query>b__0()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
<<a bunch of our custom stuff>>
at Microsoft.Azure.WebJobs.Host.Executors.VoidMethodInvoker`2.InvokeAsync(TReflected instance,Object[] arguments) in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\VoidMethodInvoker.cs:line 21
at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`2.<InvokeAsync>d__10.MoveNext() in C:\projects\azure-webjobs-sdk-rqm4t\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionInvoker.cs:line 52
在 .NetCore 3.1 函数 (v3) 中:
使用 Microsoft.Azure.ServiceBus; 使用 Microsoft.Azure.WebJobs; 使用 Microsoft.Extensions.Logging; 使用 MyProject.Services;
命名空间 MyProject.Functions { 公开课 MyFunction { 私有只读 MyDbContext _ctx;
public MyFunction(MyDbContext ctx)
{
_ctx = ctx;
}
[FunctionName("MyFunction")]
public override void Run([ServiceBusTrigger("%QueueName%",Connection = "%ConnectionString%")]
Message msg,ILogger log)
{
var service = new MyService();
service.DoStuff();
}
}
}
在 .NET 4.8 类库中:
使用 System.Collections.Generic; 使用 System.Data.@R_502_6308@Client; 使用 System.Linq;
命名空间 MyProject.Services { 公共类 MyService { 私有只读 MyDbContext _context;
public MyService(MyDbContext ctx)
{
_context = ctx;
}
public void DoStuff()
{
//this works
var lineItems1 = _context.LineItems.Where(li => li.Description == "something arbitrary").ToList();
//this gives the exception and stack trace from the original post
var lineItems2 = _context.Database.@R_502_6308@Query<LineItem>(
"SELECT * FROM LineItems WHERE Description = @Description",new[] { new @R_502_6308@Parameter("@Description","something arbitrary") }).ToList();
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)