2014-06-10 160 views
0

我試圖使用devart dotConnect 8.4 + EF6.1執行該代碼塊支持:dotConnect:CROSS APPLY不是由Oracle數據庫11g

var menus = (from m in dbSet 
      from p in m.RegraAcesso.Perfis 
      from u in p.Usuarios 
      where u.Id == userId && m.Pai.RegraAcesso.Token.Equals(module) 
      select m) 
      .Include(p => p.Pai) 
      .ToList(); 

但它拋出這個錯誤:

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.NotSupportedException: Oracle Database 11g及更低版本不支持CROSS APPLY。需要Oracle 12c或更高版本才能正確運行此LINQ語句。如果您需要使用Oracle Database 11g或更低版本運行此語句,請重新編寫該語句,以便將其轉換爲SQL,並由您使用的Oracle版本支持。

我使用: dotConnect爲Oracle 8.4.171.0 + EF6.1(代碼優先)+的Oracle 11g

它與dotConnect用於Oracle 7.5.164.0 + EF4(代碼 - 工作第一個)+ Oracle 11g

回答

1

從12c版本開始,Oracle服務器支持OUTER APPLY/CROSS APPLY結構。我們在dotConnect for Oracle中的實現可避免生成OUTER APPLY/CROSS APPLY(如果可能),但有些LINQ查詢不能在不使用OUTER APPLY/CROSS APPLY的情況下進行轉換。在這種情況下,你應該重寫你的LINQ語句。另外,隨着實體框架引擎的開發,外部應用程序/十字架應用程序結構可能開始在以前未生成的情況下生成。因此,我們還建議您創建一個小型測試項目並聯系CodePlex支持:https://entityframework.codeplex.com/

+0

我重寫了我的查詢,現在正在工作。但是我不能在一個單獨的查詢中,在我的初始LINQ語句中沒有* from * *因爲關係而做到這一點。謝謝你的支持。 –

相關問題