2012-04-14 49 views
0

最近我關閉了我的應用程序中的LazyLoading,因爲我希望它讓我更加意識到我發送的SQL查詢的數量。問題是,當我在嘗試訪問實體之前忘記了某處加載實體時,它只是返回null(而不是Exception)。這意味着我的邏輯錯誤地認爲該值爲空,導致流程後面的所有類型的問題。訪問實體框架中的卸載導航屬性時是否可以拋出異常?

我知道有IsLoaded標誌,但首先你必須添加樣板代碼,其次,這仍然是你可以忘記檢查的東西。

是否有可能讓實體框架在訪問卸載導航屬性時自動拋出異常?這對我來說似乎是正確的方式,爲什麼你會想要忽略你的實體沒有加載並讓程序繼續的事實?

或者我在錯誤的方向思考? :|

(順便說一句EntityCollections更差,因爲他們根本返回一個空列表像什麼是錯的)

回答

0

沒有沒有做任何自動方式。理論上你可以創建自定義T4模板來生成你的實體,並在每個屬性獲得者中檢查IsLoaded。如果您想使用POCO方法,這不會對您有所幫助,因爲此類檢查會打破POCO規則並使您的實體依賴於EF。如果您使用的是基於EntityObject的實體,則可以嘗試這種方法。

+0

我使用DB首先,但它聽起來像很多工作。你會推薦這樣做嗎?你怎麼處理這個問題呢? – 2012-04-14 13:29:22

+0

它不應該這麼大。您將從現有模板開始,只更新導航屬性的屬性獲取器生成代碼。 – 2012-04-14 13:37:11

相關問題