2011年5月21日 星期六

使用 Oracle Entity Framework 的問題

使用ODAC 11.2.0.2.30 Beta for Entity Framework and LINQ to Entities (以下簡稱 Oracle EF)來查詢資料,發生了以下的錯誤。

情境

發票的主檔與明細檔。

這只是相當簡單的查詢CREATE TABLE MYSCHEMA.INV
(
INVOICENO NUMBER(38),
NAME CHAR(10 BYTE)
)

CREATE TABLE MYSCHEMA.INVDETAIL
(
INVDETAILID NUMBER(38),
INVNO NUMBER(38),
QTY NUMBER(38),
AMT NUMBER(38)
)

並且,以 InvNO 做為關聯

image

執行下面的 LINQ To Entity

var context = new Entities();
var q = from m in context.INVs
      select new
               {
                 m.INVOICENO,
                 Amt = m.INVDETAILs.Sum(x => x.QTY * x.AMT)
               };
Console.WriteLine(((ObjectQuery)q).ToTraceString());
var resutl = q.ToList();

發生錯誤

Oracle.DataAccess.Client.OracleException: ORA-00904: "Extent1"."INVOICENO": invalid identifier

產生的sql 還有些長,就不貼出來了。

已在 Oracle ODP.NET Forum 上發問了。

說實話,這樣的查詢其實相當普遍,然而 Oracle 在 Alfa 版時竟沒查出,而在Beta 版時給普羅大眾給測到這個 bug,實在有些……

沒有留言:

Share with Facebook