Estou usando Entity Framework e Oracle. O ODAC da Oracle parece ter um bug conhecido em que os dados do tipo NUMBER são convertidos para Int64 pelo Entity Framework. Eu pensei que uma visão me ajudaria, mas
CREATE OR REPLACE VIEW test as
select 1 AS ONE ,CAST(2 AS NUMBER(1)) AS TWO ,CAST(3 as INT) AS THREE from dual
union
select 1 AS ONE ,CAST(2 AS NUMBER(1)) AS TWO ,CAST(3 as INT) AS THREE from dual
Quando você olha para a exibição, o tipo de dados é Número sem precisão para todos eles. Isso parece ser uma consequência da UNIÃO como apenas
CREATE OR REPLACE VIEW test as
select 1 AS ONE ,CAST(2 AS NUMBER(1)) AS TWO ,CAST(3 as INT) AS THREE from dual
produz NUMBER, NUMBER(1), NUMBER como os tipos de dados
Existe uma solução alternativa para forçar o Oracle a derivar uma precisão em uma visão com um UNION?
Editar: @Phil pergunta qual é o resultado desejado. Ele está certo de que o Entity Framework precisa ter uma precisão para trabalhar, portanto, o tipo de dados desejado da amostra acima seria NUMBER (1)
Editar: @Phil para esta versão Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Produção no Windows de 32 bits, uma visualização com uma união fornece uma visualização que possui NUMBER sem precisão. Entity Framework interpreta isso como int 64.
Estou procurando uma solução que mostre os NÚMEROS com uma precisão que o Entity Framework possa entender como um inteiro de 32 bits. Qualquer precisão de NUMBER(1) a NUMBER (9) faz o trabalho.
Se você diz
dá o que você quer, por que não usar o mesmo para união: