Базовый каркас Oracle DB в результате выдаст несколько идентификаторов (первичных ключей)
Когда я строю эту базу данных Oracle (сначала базу данных), и она генерирует мне все модели, контексты, отношения FK и т. Д. Но когда я начинаю запрос, это дает мне ошибку в контексте. (простые вещи, как выбрать * из (любой таблицы))
Появляется следующая ошибка.
System.InvalidOperationException
HResult=0x80131509
Сообщение = Свойства "Address.AddressId", "Address.AddressItemId" настроены на использование генератора значений "Identity" и сопоставлены с той же таблицей "[DBName].ADDRESS". Только один столбец в таблице может быть настроен как "Идентификация". Вызовите ValueGeneratedNever для свойств, которые не должны использовать Identity.
Источник =Oracle.EntityFrameworkCore
Трассировки стека:
в Oracle.EntityFrameworkCore.Internal.OracleModelValidator.ValidateSharedColumnsCompatibility(IReadOnlyList`1 mappedTypes, String tableName)
в 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, соглашение IConventionSetBuilderSetBuilder, валидатор IModelValidator)
в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.<>c__DisplayClass5_0.b__1()
в System.Lazy`1.ViaFactory(режим LazyThreadSafetyMode)
в System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, логическое значение useDefaultConstructor)
в System.Lazy`1.CreateValue()
в System.Lazy`1.get_Value()
в Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(контекст DbContext, соглашение IConventionSetBuilderSetBuilder, валидатор 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 scope)
в 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 scope)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(IServiceCallSite callSite, аргумент TArgument)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(IServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.b__0(ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
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()
в 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)
в OracleConsoleApp.Program.Main(String[] args) в C:\GitPlayGround\OracleConsoleApp\OracleConsoleApp\Program.cs: строка 47
Мне нужно использовать соединения FK в этой сложной структуре. У меня нет опыта ни с Oracle, ни с Oracle.EntityFrameworkCore (2.2.6, ядро приложения 2.2)
Кто-нибудь может посоветовать мне, что делать, Не могу найти ключ, чтобы начать решать эту проблему.
1 ответ
После глубокого исследования мой коллега предложил решение. В Oracle генерируемые ценности работают иначе. Сначала в базе данных устанавливается аннотация к данным ValueGeneratedOnAdd();.
Это не рабочая модель и не контекст.
Таким образом, выборочное удаление этого ValueGeneratedOnAdd() приведет к рабочему результату и решит проблему.