我試圖用EF 4.3.1檢索一組記錄。我需要獲得某些列中具有NULL值的所有記錄。使用「IS NULL」的地方
我檢查了數據庫,很多行在該列中都是空的,列也是空的。 EF正在做一些奇怪的事情。查看分析器,它生成以下SQL:
SELECT
CAST(NULL AS int) AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]
WHERE 1 = 0
我的實體列被聲明爲「int?」
我試着用以下conbinations,但我得到了相同的結果:
dbset.Where(e=>e.MyNullableInt == null).ToList();
dbset.Where(e=>e.MyNullableInt.Equals(null)).ToList();
我可以通過這種奇怪的行爲的唯一辦法就是這一步後,裝載全套,填充一個變量,並做了哪裏,因爲它載入所有數據,所以非常不方便。
任何想法如何實現這一目標?
更新:我發現在Codeplex上關於檢測到問題,影響EF之前的版本中的EF以下門票5 http://entityframework.codeplex.com/workitem/178 他們建議使用比較要解決這個問題,但在我的情況下,我不使用一個變量,我需要實際使用空值過濾。 任何人都知道如何解決這個問題? – Charles 2013-04-29 21:12:36
您確定您已將映射定義爲可爲空嗎?你在實體的字段上有[Required]屬性嗎? – 2013-04-29 22:06:38
是的,實際上這個列是一個外鍵。實體的配置是使用流暢的API進行的。 我已經檢查過,並且數據庫有很多行,在這個列中有空值。 如果從EF獲得整個集合,它將爲那些在該列上沒有值的行以及具有這些行的那些行的ID返回null。當您使用(x => x.id == null)條件時會發生此問題。 現在遷移到EF的最新版本並不是一種選擇,因爲它會要求我在整個應用程序中進行多次測試。 – Charles 2013-05-01 15:24:19