1

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

出现以下错误。

System.InvalidOperationException

H结果=0x80131509

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

源=Oracle.EntityFrameworkCore

堆栈跟踪:

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

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

在 Microsoft.EntityFrameworkCore.Infrastructure.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.Infrastructure.ModelSource.CreateModel(DbContext 上下文,IConventionSetBuilder 约定集生成器,IModelValidator 验证器)

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

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

在 System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)

在 System.Lazy`1.CreateValue()

在 System.Lazy`1.get_Value()

在 Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext 上下文,IConventionSetBuilder 约定集生成器,IModelValidator 验证器)

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

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

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

在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite,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_DbContextDependencies()

在 Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()

在 Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies()

在 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:line 47 中的 OracleConsoleApp.Program.Main(String[] args)

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

4

1 回答 1

4

经过深入研究,我的同事提出了解决方案。在 Oracle 产生的价值的工作不同。首先使用数据库设置数据注释 ValueGeneratedOnAdd();。

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

所以选择性地删除这个 ValueGeneratedOnAdd() 将导致工作结果并解决问题。

于 2019-10-29T12:57:26.207 回答