2012-03-12 29 views
3

當我使用的ASP.NET Web API與實體框架忽視的導航性能。 我將默認的序列化程序更改爲JSON.NET(導致默認的DataContractSerializer完全無法使用EF)。 現在它更好(它至少工作),但仍然不完美。在發送GET請求之後,我從一個表中獲得所有屬性加上導航屬性中的很多數據(所以基本上來自其他實體的所有數據都與我想要獲得的實體有關)。 我怎樣才能讓它從這個實體只有序列化字段,而不是導航屬性?如何序列化

感謝您的幫助

+1

我會說:禁用延遲加載和測試,如果有幫助。 – Slauma 2012-03-12 23:11:19

+0

謝謝!有效!但我不確定爲什麼。延遲加載基本上會延遲數據加載,所以爲什麼在這裏導致它? – Bart 2012-03-13 09:15:47

+0

酷!我已經通過其他解釋將我的評論轉換爲答案。 – Slauma 2012-03-13 14:11:52

回答

1

嘗試禁用延遲加載。

的JSON序列化是通過你的實體的屬性迭代它們序列化,因此也呼籲導航性能的吸氣劑。調用導航屬性的getter =觸發延遲加載。加載被延遲了一段時間,但直到序列化程序到達導航屬性並導致額外的數據庫查詢來獲取然後已被序列化的子屬性值。

2

禁用延遲加載有效地從JSON序列中刪除關係的東西,但導航性能仍然會出現在JSON。

您可能需要從模型中刪除這些導航屬性,如果他們不有用你或者選擇在你的控制器所需的性能。

+1

在EF 6中不做任何事情 – arviman 2014-08-18 12:22:27