我使用的是C#(.NETCoreV2.2)和EFCore。我有很老的密码
正在从数据库检索行:
string id = "123";
using (var context = new UsersDb())
{
var req = context.ScanRequests.FromSql($"EXEC GetById {id}").FirstOrDefault();
// ...
}
GetById
是一个存储过程,用azuresql编写(基本上是-sqlserver)。
此代码最近开始引发异常:
System.ArgumentNullException: Value cannot be null.
Parameter name: key
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
at lambda_method(Closure , ServiceProviderEngineScope )
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()
at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()
at Microsoft.EntityFrameworkCore.DbContext.get_Model()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityType()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityQueryable()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.System.Linq.IQueryable.get_Provider()
at Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSql[TEntity](IQueryable`1 source, FormattableString sql)
at ***.***Factory.<>c__DisplayClass0_0.<GetById>b__0() in /tmp/sources/SystemLayer/***/***.cs:line 29
当我在本地环境中使用相同的参数运行相同的代码时,这个问题不会发生在我身上。
更新1
为了确保哪个是有问题的行(创建进程或运行
FromSql
var req = context.ScanRequests.FromSql($"EXEC GetById {id}").FirstOrDefault();
更新2
我想问题可能是因为我映射到了数据库-可能数据库模式已经更改,而没有相应地更改EF。所以我再次运行mapping命令:
Scaffold-DbContext "cs" ...
我用EF Nuget包2.2.1运行代码。我看到我可以将EF包更新到2.2.2。我做了,但没有解决问题。同样的行为。