2011-05-03 53 views
1

您好:我正在使用devArt的Oracle Connect與實體框架4.1 POCO和Oracle一起工作。實體框架,devArt和Oracle VarChar參數

我在Oracle列類型爲Char(固定長度)的某些查詢中遇到問題。在生成的SQL查詢中使用的參數被格式化爲VarChar而不是Char,並且導致我的查詢返回零行。有沒有辦法強制EntityFramework/DevArt填充參數?

下面是一個問題的示例(查詢用戶名)。這段代碼應該返回行,但不是。

 

string aUserName = "Test"; 
var query = from u in users 
      where u.UserName == aUserName 
      select u; 
 

如果我改變的代碼的第一行:

string aUserName = "Test".PadRight(20); 

然後,它的工作原理(在Oracle列是CHAR(20))。我想不必填充(我不必用SQL Server)。我可以改變一些配置嗎?連接字符串開關?我的POCO上有一個屬性?

+0

有什麼理由爲什麼列是CHAR?是否允許簡單地將其更改爲varchar2? – Harrison 2011-05-03 17:04:32

+0

希望我可以,但這是一個遺留數據庫,有大量的代碼觸及它和多個安裝(我們是一個ISV)。所以我必須使用我們已有的模式進行滾動。 – JMarsch 2011-05-03 17:20:17

回答

1

我們已經在我們的論壇爲您回覆here
如果您在提供的解決方案中遇到任何問題,請通知我們。

+0

謝謝 - 在你的論壇上回復 – JMarsch 2011-05-10 15:00:19

2

你有兩個選擇:
1.你沒有和墊權限的用戶名字符串變量是什麼。
2.刪除空字符 - 修剪用戶名字段。

其他選項:

string aUserName = "Test"; 
var query = users.select(x => string.Join(string.Empty, x.UserName).TrimEnd()). 
        where(x => x==aUserName) 

(這將返回您的用戶名,而不是整個用戶對象)

希望這有助於。

+1

我將你標記爲答案,因爲Padright最終成爲了我的情況的最佳解決方案。 (我必須同時支持SQL Server和Oracle)。我確實找到了另一個有利於純Oracle開發的解決方案:您可以將[Column]屬性應用於列,並將「CHAR」作爲名稱參數的類型名稱傳遞。這將使所有的東西在Oracle中都能正常工作,但是你會得到一個SQL Server的運行時異常。 – JMarsch 2011-05-04 15:41:01