3

oracle 및 sqlServer에서 작동해야하는 응용 프로그램에서 작업합니다. SqlServer에서는 "비트"를 사용하여 불리언 값을 저장하고 오라클 수 (1)를 저장했습니다.엔티티 프레임 워크 코드와 첫 번째 오라클 공급자가있는 부울 유형

우리는 데이터베이스 필드에 매핑 된 bool 속성이 거의 없다는 것을 발견 했으므로 코드 첫 번째 모델을 만들었습니다.

또한
this.ToTable("ZPRUEBABOOLEANO", schema); 

    this.HasKey<int>(t => t.Numero); 
    this.Property(t => t.Numero).HasColumnName("NUMERO"); 

    this.Property(t => t.Booleano).HasColumnName("BOOLEANO"); 

는 자상 한 응용 프로그램 구성 파일에 추가 (단순성을 위해 우리가 추가 DLL을 사용하지 않고 시험을이) : 예를 들어

:로

public partial class ZPruebaBooleano 
{ 
    public int Numero { get; set; } 

    public bool Booleano { get; set; } 
} 

은 매핑

<oracle.dataaccess.client> 
    <settings> 
     <add name="bool" value="edmmapping number(1,0)" /> 
     <add name="byte" value="edmmapping number(3,0)" /> 
     <add name="int16" value="edmmapping number(4,0)" /> 
     <add name="int32" value="edmmapping number(9,0)" /> 
     <add name="int64" value="edmmapping number(18,0)" /> 
    </settings> 
    </oracle.dataaccess.client> 

나는 프로 바이더 팩토리가 모델을 만들 때 그것을 읽었을 것이라고 확신한다. 파일에 매핑 된 형식 이름에 잘못된 항목을 추가하면 예외가 발생합니다.

다른 포럼에서 찾은 것처럼 작동합니다. 하지만 지금은 코드를 포함하여 항상 작동해야하는지 확신 할 수 없습니다.

유형 'Edm.Boolean [null 허용 = 거짓,의 DefaultValue =]' 'Booleano'에서에 : 내가 (어떤 실수 죄송 스페인어 번역) 코드를 excecute 때

나는이 예외가 type'PruebaBooleanos.ZPruebaBooleano 정밀 = 38라고 OracleEFProvider.number [FALSE Null 허용 = 된 DefaultValue = 정밀 = 38 배율 = 0]

그 funy ' 와 compatyble 없습니다'. 내가 있던 테이블을 통보하지 않은 경우 또한

CREATE TABLE ZPRUEBABOOLEANO 
(
    NUMERO NUMBER(15), 
    BOOLEANO NUMBER(1) 
) 

, 난 흥미 내가 심지어이 실수를 가진 것을 찾기 : 데이터베이스는이 스크립트입니다 실제로 번호 (1), 나는 그것에 대해 확신이다 마치 오라클 제공자가 열 (column)이 숫자인지를 확인하지 못하는 것처럼 매핑합니다. 지금은 잘 매핑되어 있으며 테이블과 스키마가 있습니다.

이 코드에서 볼 수 있듯이 부울 값에 의해 래핑 된 정수 속성을 만드는 테스트가 있습니다.

namespace PruebaBooleanos 
{ 
    public partial class ZPruebaBooleano 
    { 
     public int Numero { get; set; } 

     public bool Booleano 
     { 
      get 
      { 
       return iBooleano == 1 ? true : false; 
      } 
      set 
      { 
       iBooleano = value ? 1 : 0; 
      } 
     } 
     public int iBooleano { get; set; } 
    } 
} 

이 마지막 경우에는 부울을 무시하고 정수를 매핑했습니다.

오라클에서 잘 작동했습니다. SQL 서버가 데이터베이스에 MAPED되지 않는 부울 속성을 사용하여 개체 모델을 조회 비트

  • 캔트 때문에,

    1. 그것은 SQLSERVER에 실패하지만이 문제를 추가했다.

    SqlServer의 비트 필드를 Number로 변경할 수 있습니다.

    하지만 Oracle에서 sqlserver와 number (1)를 유지하고 싶습니다.

    누구나 비슷한 문제가 있었습니까?

    나는 어떤 아이디어라도 열어 감사합니다 !!!

    은 Libo

  • 답변

    3

    내가 게시 날짜를 기준으로 판단, 적어도 말을하는 지금이 대답은 당신을 위해 쓸모가있을 것입니다 확실 해요, 그러나 많은 나 같은,이 유용한를 찾을 수 있습니다.

      닷넷 당신이 <add name="bool" value="edmmapping number(1,0)" />을 추가하는 경우 (ODP가/ODAC)
    1. .config 파일의 매핑 설정 코드 첫 번째에 대한 고려되지 않습니다 DO NO SUPPORT EF 코드 첫째, 즉,에 대한
    2. 오라클 데이터 공급자 EDMX 파일을 가지고 있으며 모델 - 첫 번째 또는 db - 첫 번째를 사용할 때만 작동합니다.
    3. 모든 희망 사항이 손실되는 것은 아니지만 귀하의 케이스 (및 기타 많은 작업)에 대한 "해결 방법"이 있습니다. 사실 SQL 서버와 오라클 (그리고 아마도 더 많은 db 엔진)에서 POCO 클래스를 사용하십시오.

    그래서 나를위한 해결책은 매우 간단했습니다. 저는 여러분에게 똑같은 일을 성취하려고 많은 시간을 보냈습니다. 포럼에서 오라클에있는 어떤 사람 (저에게 보이는 직원)이 제게 말하지 않았지만 지원, 기간.

    1. 는 논리 값을
    2. 를 저장할 SQL 서버의 integer 열이
    3. 이 두 가지 속성을 가지고 같은 목적을 위해 오라클에 number(1,0) 열이 :

      그래서 싶은 것은 이것이다 모델에서 실제로 DB의 필드에 매핑되는 모델과 매핑되지 않지만 매핑 된 값을 부울로 캐스트하는 모델

    [Table("SomeTable")] 
    public class MyModel { 
    
        [Column("SOME_BOOLEAN")] 
        public int SomeBooleanValue { get; set; } 
    
        [NotMapped] 
        public bool SomeBoolean { 
         get { 
          return Convert.ToBoolean(SomeBooleanValue); 
         } 
         set { 
          SomeBooleanValue = Convert.ToInt32(value); 
         } 
        } 
    } 
    

    을 그리고 당신은 실제로 두 데이터베이스에 매핑 할 수 int를 참조합니다 코드에서 SomeBoolean 액세스 : 그래서 코드에서이 작업을 수행.

    또한이 방법을 사용하여 Enum 상수 값을 매핑 할 수 있습니다.

    +1

    안녕하세요, Stackoverlfow 전능하신 분,이 답변을 백만배 upvote 내게 힘을주세요. 깨끗한 손으로 환상적인 솔루션. –

    관련 문제