2017-10-05 27 views
0

entityframework 유창 API를 사용하는 첫 번째 데이터 액세스 방법 인 오라클 데이터베이스의 Dev Art가 오류가 발생했습니다.ORA-01450 : 최대 키 길이 (6398) 초과 (Devart.Data.Oracle.OracleException)

실제 테이블 디자인 :

enter image description here

이 쿼리 실패.

CREATE TABLE DADeskSettings ( 
    UserID NVARCHAR2(2000) NOT NULL, 
    Password NVARCHAR2(2000) NOT NULL, 
    DADeskURL NVARCHAR2(2000) NOT NULL, 
    WebURL NVARCHAR2(2000) NOT NULL, 
    IsDADeskSettings NUMBER(1) NOT NULL, 
    DAType VARCHAR2(4 CHAR) NOT NULL, 
    UPDATEDADESK NUMBER(1) NOT NULL, 
    isshortseavoy NUMBER(1) NULL, 
    CreatedBy VARCHAR2(8 CHAR) NULL, 
    UpdatedBy VARCHAR2(8 CHAR) NULL, 
    CONSTRAINT PK_DADeskSettings PRIMARY KEY (UserID, Password, DADeskURL, WebURL, IsDADeskSettings, DAType) 
) 

ORA-01450: maximum key length (6398) exceeded 

엔티티 프레임 워크 edmx 모델 + devArt와 함께 작동합니다. 어떤 제안?

var dummy2 = ContextFactory.Db.GetQuery<OPRPortCall>().Select(x=>x.AccountCode).FirstOrDefault(); //this is one of the line. 


    *** Client Application Says *** 

- ORA-01450: maximum key length (6398) exceeded (Devart.Data.Oracle.OracleException) 

- The type initializer for 'Server.ManagerService.Registers.LookupVmSvc' threw an exception. (System.TypeInitializationException) 

- Exception has been thrown by the target of an invocation. (System.Reflection.TargetInvocationException) 



Stacktrace 
*** Client Application Says *** 

    at Devart.Data.Oracle.bh.d(Int32 A_0) 
    at Devart.Data.Oracle.de.a(Int32 A_0, z A_1) 
    at Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords, Boolean nonQuery) 
    at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery) 
    at Devart.Data.Oracle.OracleCommand.ExecuteNonQuery() 
    at Devart.Common.Entity.ej.a(DbConnection A_0, Nullable`1 A_1, b3 A_2) 
    at Devart.Common.Entity.ej.a(DbConnection A_0, Nullable`1 A_1) 
    at Devart.Data.Oracle.Entity.OracleEntityProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) 
    at System.Data.Entity.Internal.DatabaseOperations.Create(ObjectContext objectContext) 
    at System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext) 
    at System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) 
    at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) 
    at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) 
    at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() 
    at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) 
    at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.AsNoTracking() 
    at System.Data.Entity.Infrastructure.DbQuery`1.AsNoTracking() 
    at Server.Manager.DataAccess.VMEntities.GetQuery[T](Boolean tracking) 

답변

1
  1. dbMonitor 도구를 사용하고 실행하는 데 실패 정확한 SQL 문을 지정하십시오 : https://www.devart.com/dotconnect/oracle/docs/?dbmonitor.html합니다.

  2. config.CodeFirstOptions.TruncateLongDefaultNames = true로 설정해보십시오. 이게 도움이 되나요? https://www.devart.com/dotconnect/oracle/docs/?CodeFirstOptions.html

+0

온 오류가 발생 질의가 추가

  • 달리, 예에서와 같이, 그 테이블에 대응하는 인덱스를 생성 비표준, 큰 블록 크기 및 가진 테이블을 만들 문제 설명, config.CodeFirstOptions.TruncateLongDefaultNames = true doesn 도움이 – anand

  • +0

    다른 가능성? – anand

    +0

    코드 우선 접근법을 사용하고 있습니다 (데이터베이스 구조는 런타임에 생성됩니다). 그렇지 않습니까? 문제를 해결하는 두 가지 다른 방법이 있습니다) 1 수정을 얻을 수 9.4.280 이상으로 업그레이드는 https://www.devart.com/dotconnect/oracle/revision_history.html 9.4.280 (25) -May-17 길이 제한없이 정의되고 PK, FK, 색인에 참여하는 문자열 열이있는 EF 핵심 모델의 지원이 향상되었습니다. 2) 길이 길이를 모두 매핑하여 전체 길이 PK에 참여하는 열은 6398 한도를 초과하지 않습니다 – Devart

    1
    • 당신이 블록 크기 8K로 버전 9.2, 10 또는 11)의 DB (오라클을 사용하는 것 같다. 작은 키 색인을 사용하십시오. 문제가있는 테이블의 인덱스를 다시 작성하면 인덱스의 초기 크기가 줄어들 수 있습니다 (your_table).
    SQL> create tablespace TS_DATA_16 datafile '+DATA' size 100M blocksize 16k; 
    SQL> alter user your_schema quota unlimited on TS_DATA_16; 
    SQL> drop table your_table; 
    SQL> create table your_table 
        (
         ... 
        ) 
         tablespace TS_DATA_16;