2012-01-17 13 views
8

Varlık Çerçevesini kullanarak, yeni çıkarılan yeni ODAC ile kullanıyorum.ODAC 11.2 Sürüm 4 (11.2.0.3.0) atanması "Oracle 11.2.0.2.0, APPLY'yi desteklemiyor" istisnası

Sorunum, önceki beta sürümlerinde çalışan sorgularımdan bazıları bu yeni sürümde çalışmayı durdurdu. mesajıyla: 'Oracle 11.2.0.2.0 GEÇERLİ desteklemez':

IQueryable<SYS_PERFIL> query1 = m.DBContext.SYS_PERFIL.Where(T => T.SYS_UTILIZADOR.Where(TT => TT.ACTIVO == 1).Count() > 0); 

IQueryable<SYS_PERFIL> query2 = m.DBContext.SYS_PERFIL.Where(T => T.SYS_UTILIZADOR.FirstOrDefault(TT => TT.ACTIVO == 1) != null); 

string test1Query = ((System.Data.Objects.ObjectQuery)query1).ToTraceString(); 

string test2Query = ((System.Data.Objects.ObjectQuery)query2).ToTraceString(); 

var test1 = query1.ToList(); 

var test2 = query2.ToList(); 

test1 currect sonuç döndürür iken, dnm2 bir kahin istisna 'anahtar kelimesini eksik ORA-00905' atar: Burada

bir örnek .

Tüm yöntemlerimi yeniden test etmek istemiyorum. EF'i kullanmamaya başvurmanın bir yolu var mı? İşte

EF getirici olduğunu sorgusu:

test1Query:

SELECT "Project1"."PERFIL_ID" AS "PERFIL_ID" FROM (SELECT "Extent1"."PERFIL_ID" AS PERFIL_ID", (SELECT COUNT(1) AS "A1" FROM "SMI2012"."SYS_UTILIZADOR" "Extent2" WHERE (("Extent1"."PERFIL_ID" = "Extent2"."PERFIL_ID") AND (1 = "Extent2"."ACTIVO"))) AS "C1" 
FROM "SMI2012"."SYS_PERFIL" "Extent1") "Project1" WHERE ("Project1"."C1" > 0) 

test2Query: önceden

SELECT "Extent1"."PERFIL_ID" AS "PERFIL_ID" FROM "SMI2012"."SYS_PERFIL" "Extent1" CROSS APPLY (SELECT "Extent2"."PERFIL_ID" AS "PERFIL_ID", "Extent2"."ACTIVO" AS "ACTIVO", "Extent2"."USER_ID" AS "USER_ID" FROM "SMI2012"."SYS_UTILIZADOR" "Extent2" WHERE (("Extent1"."PERFIL_ID" = "Extent2"."PERFIL_ID") AND (1 = "Extent2"."ACTIVO")) AND (ROWNUM <= (1))) "Element1" WHERE ("Element1"."USER_ID" IS NOT NULL) 

teşekkürler.

+4

Bu sorunu çözdünüz mü? Projeksiyon içinde FirstOrDefault kullanmayı denediğimde aynı sorunu yaşıyorum. –

+0

İlk kaydı aldığınızda gerçekten umurunda olmadığınızı varsayarak .FirstOrDefault yerine .Min kullanabilirsiniz. –

cevap

0

Telerik OpenAccess ORM, APPLY deyimini kullanmaz. İç içe geçmiş grup sorgusunda da aynı sorun vardı. OA modelini oluşturduğumda, sorgu harika çalıştı!

0

Bu yalnızca 12c'de çalışacaktır. 11g'de sorguyu yeniden yazmanız gerekir. Birden fazla etkin SYS_UTILIZADOR varsa, çoğaltmalar üretecektir. O durumda bunun üzerinde ayrı ateş etmelisin. Bu, çok sayıda satırda mükemmel performans göstermeyecektir. Küçük bir sayı üzerinde tamam olmalı.