簡體   English   中英

實體框架-在空對象上強制轉換屬性不會引發異常?

[英]Entity Framework - casting property on null object doesn't throw an exception?

我正在查看一些舊代碼,並遇到了一個片段,這似乎會引發不必要的異常。 本質上,代碼(EntityFramework查詢)如下所示:

var serviceId = (Guid?) person.Services.FirstOrDefault(s => s.Name == "foo").Id;
bool inService = serviceId.HasValue;

也就是說,一個person有多個服務分配給他們,我們將返回Namefoo的第一個服務。 然后,我們在該Service實例上獲得Id屬性(一個Guid),並將其轉換為可為空的Guid。 最后,如果該可為空的Guid具有值,則此人必須在該服務中。

(注意:這不是我選擇上面的方式,這只是我正在使用的方式)

我有一種感覺,當此人不屬於名稱為“ foo”的服務(或者實際上根本沒有任何服務)時,此代碼僅引發異常,因為FirstOrDefault調用將返回null Service實例,並訪問Id物業只會拋出一個NPE。

我向原始開發人員詢問了此片段,並被告知要執行以下操作:

(T?) entity.<non-existent entity>.SomeProperty

只會返回一個空對象,而不是拋出NPE。 另外,這種“安全的空處理”類型在實體框架查詢中發生。

這似乎是違反直覺的,甚至感覺不到應該可行。 我曾嘗試對此進行研究,但至今仍未發現任何內容。 有人對這個有經驗么? 我100%高興地發現自己做錯了,並學習了一些新知識,但對我而言,這並不正確。

作為附錄,我確實嘗試通過使用EntityFramework連接在上面的Linqpad中運行查詢,並且確實在嘗試訪問null對象屬性時確實生成了NPE。

FirstOrDefault將為對象返回null EntityFramework將確保實體上屬於復雜類型的所有屬性都不為null ,但是它將為該查詢返回null結果。

暫無
暫無

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

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