核心脚手架 Oracle DB 将给出多个 ID(主键)作为结果

Din*_*and 1 oracle entity-framework-core asp.net-core-scaffolding

当我搭建这个 Oracle DB(数据库优先)时,它会生成所有模型、上下文、FK 关系等。但当我开始查询时,它在上下文中给了我一个错误。(简单的事情,如从(任何表)中选择*)

出现以下错误。

系统无效操作异常

H结果=0x80131509

Message=属性“Address.AddressId”、“Address.AddressItemId”配置为使用“Identity”值生成器,并映射到同一表“[DBName].ADDRESS”。每个表只能将一列配置为“身份”。对于不应使用“Identity”的属性,调用“ValueGenerateNever”。

来源=Oracle.EntityFrameworkCore

堆栈跟踪:

在Oracle.EntityFrameworkCore.Internal.OracleModelValidator.ValidateSharedColumnsCompatibility(IReadOnlyList`1mappedTypes,字符串表名)

在 Microsoft.EntityFrameworkCore.Infrastruct.RelationalModelValidator.ValidateSharedTableCompatibility(IModel 模型)

在 Microsoft.EntityFrameworkCore.Infrastruct.RelationalModelValidator.Validate(IModel 模型)

在 Oracle.EntityFrameworkCore.Internal.OracleModelValidator.Validate(IModel 模型)

在 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ValidatingConvention.Apply(InternalModelBuilder modelBuilder)

在 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnModelBuilt(InternalModelBuilder modelBuilder)

在 Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnModelBuilt(InternalModelBuilder modelBuilder)

在 Microsoft.EntityFrameworkCore.Metadata.Internal.Model.Validate()

在 Microsoft.EntityFrameworkCore.ModelBuilder.FinalizeModel()

在 Microsoft.EntityFrameworkCore.Infrastruct.ModelSource.CreateModel(DbContext 上下文、IConventionSetBuilder conventionSetBuilder、IModelValidator 验证器)

在 Microsoft.EntityFrameworkCore.Infrastruct.ModelSource.<>c__DisplayClass5_0.b__1()

在System.Lazy`1.ViaFactory(LazyThreadSafetyMode模式)

在 System.Lazy`1.ExecutionAndPublication(LazyHelperexecutionAndPublication,布尔值 useDefaultConstructor)

在 System.Lazy`1.CreateValue()

在 System.Lazy`1.get_Value()

在 Microsoft.EntityFrameworkCore.Infrastruct.ModelSource.GetModel(DbContext 上下文、IConventionSetBuilder conventionSetBuilder、IModelValidator 验证器)

在 Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel()

在 Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model()

在 Microsoft.EntityFrameworkCore.Infrastruct.EntityFrameworkServicesBuilder.<>c.b__7_2(IServiceProvider p)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSitefactoryCallSite,ServiceProviderEngineScope 范围)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite,TArgument 参数)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite,ServiceProviderEngineScope 范围)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite,TArgument 参数)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite,ServiceProviderEngineScope 范围)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite,TArgument 参数)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite,ServiceProviderEngineScope 范围)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite,TArgument 参数)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(IServiceCallSite callSite,ServiceProviderEngineScope 范围)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.b__0(ServiceProviderEngineScope 范围)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(类型 serviceType,ServiceProviderEngineScope serviceProviderEngineScope)

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(类型 serviceType)

在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider 提供程序,类型 serviceType)

在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider 提供程序)

在 Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependency()

在 Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()

在 Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependency()

在 Microsoft.EntityFrameworkCore.DbContext.get_Model()

在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityType()

在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.CheckState()

在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityQueryable()

在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.System.Linq.IQueryable.get_Provider()

在 System.Linq.Queryable.Count[TSource](IQueryable`1 源)

在 C:\GitPlayGround\OracleConsoleApp\OracleConsoleApp\Program.cs 中的 OracleConsoleApp.Program.Main(String[] args):第 47 行

我需要在这个复杂的结构中使用 FK 连接。我没有使用Oracle的经验,也没有使用Oracle.EntityFrameworkCore(2.2.6,应用程序核心2.2)的经验,
任何人都可以告诉我该怎么做,找不到开始解决这个问题的线索。

Din*_*and 6

经过深入研究,我的同事提出了解决方案。在Oracle中生成值的工作方式有所不同。首先对数据库设置数据注释 ValueGenerateOnAdd();。

这不是一个工作模型和上下文。

因此,选择性删除这个 ValueGenerateOnAdd() 将产生工作结果并解决问题。