我刚刚完成了从 EF Core 2.2 到 EF Core 3.1 的升级。在此之后,我遇到了这个错误。我已经定义了这个类:
public class AdminCompanies
{
public int Code { get; set; }
public string CompanyName{ get; set; }
public string Owner{ get; set; }
public short? Administrator{ get; set; }
public short? Type { get; set; }
}
使用此配置:
public class AdminCompaniesConfiguration : IEntityTypeConfiguration<AdminCompanies>
{
public void Configure(EntityTypeBuilder<AdminCompanies> builder)
{
builder.ToTable("UTENTI");
builder.Property(t => t.Code).HasColumnName("CODICE");
builder.Property(t => t.CompanyName).HasColumnName("RAG_SOCIALE").HasMaxLength(80);
builder.Property(t => t.Owner).HasColumnName("PALLETS");
builder.Property(t => t.Administrator).HasColumnName("AMMINISTRATORE");
builder.Property(t => t.Type).HasColumnName("TIPO");
builder.Property(t => t.Owner).HasMaxLength(1);
builder.HasKey(t => t.Code);
}
}
在上下文的“OnModelCreating”中赋值:
modelBuilder.ApplyConfiguration(new AdminCompaniesConfiguration());
一切似乎都很好,但是当我尝试使用context.Database.ExecuteSqlRawAsync时,我收到了这个错误,我不明白为什么。这是堆栈跟踪:
Message:
Assert.Throws() Failure
Expected: typeof(System.Exception)
Actual: typeof(System.InvalidOperationException): The entity type 'AdminCompanies' requires a primary key to be defined. If you intended to use a keyless entity type call 'HasNoKey()'.
---- System.InvalidOperationException : The entity type 'AdminCompanies' requires a primary key to be defined. If you intended to use a keyless entity type call 'HasNoKey()'.
Stack Trace:
ModelValidator.ValidateNonNullPrimaryKeys(IModel model, IDiagnosticsLogger logger)
ModelValidator.Validate(IModel model, IDiagnosticsLogger logger)
ValidatingConvention.ProcessModelFinalized(IConventionModelBuilder modelBuilder, IConventionContext context)
ImmediateConventionScope.OnModelFinalized(IConventionModelBuilder modelBuilder)
ConventionDispatcher.OnModelFinalized(IConventionModelBuilder modelBuilder)
Model.FinalizeModel()
ModelBuilder.FinalizeModel()
ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
DbContextServices.CreateModel()
DbContextServices.get_Model()
<>c.<TryAddCoreServices>b__7_3(IServiceProvider p)
CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSite(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSite(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
ServiceProviderEngineScope.GetService(Type serviceType)
ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
DbContext.get_DbContextDependencies()
DbContext.get_InternalServiceProvider()
IServiceProvider>.get_Instance()
InfrastructureExtensions.GetService[TService](IInfrastructure accessor)
AccessorExtensions.GetService[TService](IInfrastructure accessor)
DatabaseFacade.get_Dependencies()
IDatabaseFacadeDependenciesAccessor.get_Dependencies()
RelationalDatabaseFacadeExtensions.GetFacadeDependencies(DatabaseFacade databaseFacade)
RelationalDatabaseFacadeExtensions.ExecuteSqlRawAsync(DatabaseFacade databaseFacade, String sql, IEnumerable parameters, CancellationToken cancellationToken)
AdminUsersRepo.InsertUpdateUserAsync(Int32 senderCompany, Decimal senderId, AdminUsers user, String modalita, Int32 userCompany) line 281
----- Inner Stack Trace -----
ModelValidator.ValidateNonNullPrimaryKeys(IModel model, IDiagnosticsLogger logger)
ModelValidator.Validate(IModel model, IDiagnosticsLogger logger)
ValidatingConvention.ProcessModelFinalized(IConventionModelBuilder modelBuilder, IConventionContext context)
ImmediateConventionScope.OnModelFinalized(IConventionModelBuilder modelBuilder)
ConventionDispatcher.OnModelFinalized(IConventionModelBuilder modelBuilder)
Model.FinalizeModel()
ModelBuilder.FinalizeModel()
ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder)
DbContextServices.CreateModel()
DbContextServices.get_Model()
<>c.<TryAddCoreServices>b__7_3(IServiceProvider p)
CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSite(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
CallSiteVisitor.VisitCallSite(ServiceCallSite callSite, TArgument argument)
CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
ServiceProviderEngineScope.GetService(Type serviceType)
ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
DbContext.get_DbContextDependencies()
DbContext.get_InternalServiceProvider()
IServiceProvider>.get_Instance()
InfrastructureExtensions.GetService[TService](IInfrastructure accessor)
AccessorExtensions.GetService[TService](IInfrastructure accessor)
DatabaseFacade.get_Dependencies()
IDatabaseFacadeDependenciesAccessor.get_Dependencies()
RelationalDatabaseFacadeExtensions.GetFacadeDependencies(DatabaseFacade databaseFacade)
RelationalDatabaseFacadeExtensions.ExecuteSqlRawAsync(DatabaseFacade databaseFacade, String sql, IEnumerable parameters, CancellationToken cancellationToken)
AdminUsersRepo.InsertUpdateUserAsync(Int32 senderCompany, Decimal senderId, AdminUsers user, String modalita, Int32 userCompany) line 281
所有代码在升级之前都可以正常工作。有没有人遇到过同样的问题?
任何帮助,将不胜感激
编辑
仅当我使用context.Database.ExecuteSqlRawAsync时才会引发此异常,在其他功能中一切都按预期工作。
此外,我仅在模拟对 ExecuteSqlRawAsync 的调用时才收到此错误。否则,当我从 WebAPI 调用它时,它可以工作。