簡體   English   中英

查詢GUID字段不適用於實體框架和Oracle

[英]Query of a GUID field doesn't work entity framework and Oracle

我有最新版本的Oracle數據訪問組件(ODAC)(12.1.0.1.0),我首先使用它與EF 5數據庫。

在我的數據庫中,我有一個RAW類型的字段(16)當數據保存到數據庫中時,格式為大寫,沒有任何破折號(例如:A0D8F7E720DDBF4296C932F7A730A635)。

我嘗試在此GUID字段上使用where子句查詢實體,但無法獲得任何結果。 我們的where子句看起來像這樣(C#)

Context.Users.where(x=>x.GuidField == anotherGuid);

兩個變量都是GUID類型。

GuidField字段是數據庫中的RAW(16),但實體框架將其映射為GUID

任何人都有任何想法。

提前致謝

這似乎是Oracle驅動程序或ev的問題。 EF如何通過Guid參數。 當你比較兩個Guids(一個來自Oracle DB的原始(16),一個Guid在你的程序中)時出現問題。 當您的實體將raw(16)作為主鍵時,它也會出現在Find()操作中。

浪費了幾個小時后,我找到了以下臨時解決方法:創建一個Guid列表,添加您要搜索的Guid,然后使用list.Contains()進行比較。 看起來好像在這種特殊情況下,比較不是在Oracle數據庫服務器上的條件下完成的,而是在.Net程序中。 至少它給出了預期的結果。

例如

List<Guid> searchList = new List<Guid>();
searchList.Add(anotherGuid);
Context.Users.where(x => searchList.Contains(x.GuidField) );

來自Oracle .NET團隊(通過twitter @oracleDotNet)回應我要求他們看看線程:這聽起來像bug 18336370,這在下一個ODAC版本中得到修復。 這里描述的原始bug:community.oracle.com/thread/3523194

我使用Oracle.ManagedDataAcess.dll版本4.121.1.0遇到了同樣的問題。 如上所述,我找不到更好的解決方法。 非常討厭的問題,因為GUID到處都是EF。

我目前正在下載ODTwithODAC121012.zip以檢查問題是否仍然存在。 希望能得到積極的消息。

更新2015年1月27日:我剛剛從2014年Dezember檢查了最新版本= 4.121.2.0第3版。該軟件包是通過nuget console下載的。 我仍然使用EF 5代替EF6進行測試。 現在可以使用帶有EQUAL(=)的LINQ表達式和針對Oracle數據庫的GUID(測試Oracle 11 DB)。 也可以使用基於GUID的外鍵延遲加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM