0

기존 데이터베이스에 대해 코드 우선을 사용하는 EF 4.4 (.NET 4.0 버전 EF 5.0)를 사용하는 하나의 웹 사이트가 있습니다. 모델 유형의 케이스 문제로 인해 해결 방법이 필요한 Devart Oracle 데이터 공급자를 사용합니다.Dev First에서 Code First와 Database First Entity Framework 사용

그러면 Devart 공급자가 소문자 데이터 형식을 인식하여 스키마를 해석합니다. (또는 그 라인을 따라 무언가)

이 웹 사이트 내에서 EF 4.1 Database First (기존 데이터베이스와 비교하여)를 기반으로 구축 된 컨트롤이로드를 시도 할 때까지 제대로 작동합니다. Devart 공급자는 웹 사이트에서 공유되는 것으로 보이며 코드 우선으로 작동하도록 이전 해결 방법을 사용했기 때문에 공급자가 모든 대문자로 데이터 형식을 (올바르게) 인식 할 수 없다는 오류가 발생합니다.

해결 방법이 있습니까? 아니면 데이터베이스 우선 접근 방식을 코드 우선으로 변환해야합니까?

편집 : 여기에 관련된 해결 방법 코드가 있습니다. 나는 그것을 얻은 포럼 게시물을 잃어 버린 것 같다. 나는 믿는다는 Devart 포럼에 있던 :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     var config = Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfig.Instance; 
     config.Workarounds.ColumnTypeCasingConventionCompatibility = true; 

     ... initialization code here ... 

     base.OnModelCreating(modelBuilder); 
    } 

및 관련 오류를 이것이다 :

System.Data.MetadataException: Schema specified is not valid. Errors: 
Model.ssdl(205,6) : error 0040: The Type CHAR is not qualified with a namespace or alias. Only primitive types can be used without qualification. 
Model.ssdl(206,6) : error 0040: The Type VARCHAR2 is not qualified with a namespace or alias. Only primitive types can be used without qualification. 

이 잔뜩 더 많은,하지만 그들은 서로 다른 라인과 데이터 형식 모두 같은 오류가있어 .

+0

오류를 게시 할 수 있습니까? – jackncoke

답변

2

Devart 공급자는 현재의 응용 프로그램 도메인 (웹 사이트)의 동작을 결정의 ColumnTypeCasingConventionCompatibility 옵션이 설정되어

후 웹 사이트에서 공유 할 것으로 보인다. 프로세스 (웹 서버)는 ColumnTypeCasingConventionCompatibility 값이 다른 여러 응용 프로그램 도메인을 실행할 수 있습니다.

특정 응용 프로그램 도메인에 대한 ColumnTypeCasingConventionCompatibility의 값은 웹 사이트의 모델에 사용 된 DbContext 템플리트의 Fluent Mapping 속성에 따라 다릅니다. Fluent Mapping = true는 ColumnTypeCasingConventionCompatibility = true와 함께 사용해야하며 그 반대도 마찬가지입니다. Fluent Mapping = false는 ColumnTypeCasingConventionCompatibility = false와 함께 사용해야합니다.

다음과 같은 다른 방법으로 웹 사이트에 대한 ColumnTypeCasingConventionCompatibility을 설정할 수 있습니다

A) 문맥의 정적 생성자 또는 Main 메서드의 컨텍스트 (예를 들어, 처음 사용하기 전에 코드 귀하의 프로그램 등)

b) in * .config. 예 :

<configuration> 
    <configSections> 
    <section name="Devart.Data.Oracle.Entity" 
    type="Devart.Data.Oracle.Entity.Configuration.OracleEntityProviderConfigurationSection, 
    Devart.Data.Oracle.Entity, Version=7.5.179.0, Culture=neutral, 
    PublicKeyToken=09af7300eec23701" /> 
    </configSections> 
    <Devart.Data.Oracle.Entity xmlns="http://devart.com/schemas/Devart.Data.Oracle.Entity/1.0"> 
    <CodeFirstOptions ColumnTypeCasingConventionCompatibility="true"/> 
    </Devart.Data.Oracle.Entity> 
</configuration> 
+0

솔루션이 실제로 회사에서 소스 제어를 잘못 사용하고 있음을 알 수 있습니다. 프로젝트를 검사 할 때 ColumnTypeCasingConventionCompatibility 값이 설정되었지만 마스터 프로젝트가 오래된 체크 인 바이너리에 대해 빌드되고있었습니다. 하지만 이것은 진정한 대답입니다. 둘 다 설정해야합니다. 그렇지 않으면 올바르게 작동하지 않습니다. – Talonj