15
Q
實體框架創建代理
A
回答
16
代理所必需的兩個特點:
- 延遲加載 - 導航屬性加載一次訪問的第一次
- 變化動態跟蹤 - 如果你在實體修改任何屬性的情況下被告知這個變化並設置實體的狀態。如果不使用動態更改跟蹤,則上下文必須使用快照更改跟蹤,這意味着在進行保存之前發現所有更改=即使未更改,也要瀏覽所有屬性。
這兩種技術都有其他要求:
- 延遲加載 - 在實體的所有導航屬性必須是
virtual
。延遲加載必須啓用。 - 動態更改跟蹤 - 所有映射的屬性必須是
virtual
。
2
除了以前的答案,運行時使用您的POCO類使用反射,並創建一個動態代理類繼承您的POCO類。因此它將在運行時添加這些功能+ EntityObject功能,這將有助於動態代理啓用延遲加載和動態更改跟蹤。
相關問題
- 1. 禁用實體框架代理創建
- 2. 實體框架5:創建
- 3. 實體框架創建重複實體
- 4. 實體框架4.0。實體創建
- 5. 實體框架DBSet包含無代理
- 6. 實體框架中的代碼清理
- 7. WCF和實體框架代理對象
- 8. 如何調試實體框架代理?
- 9. 服務代理與實體框架6
- 10. 使用實體框架和Web代理
- 11. 實體框架建模代碼優先
- 12. 實體框架代碼。效率建議
- 13. 如何創建實體框架ObjectContext?
- 14. 實體框架沒有創建表格
- 15. C#實體框架LINQ - 創建報告
- 16. 實體框架創建最新的IQueryable
- 17. 實體框架 - 無法創建關聯
- 18. 未創建實體框架數據庫
- 19. 使用PowerShell創建實體框架DbContext
- 20. 在實體框架中創建方法
- 21. 實體框架創建時調用SaveChanges
- 22. 實體框架創建新表
- 23. 在實體框架中創建關聯?
- 24. 實體框架不創建數據庫
- 25. 創建複合關鍵實體框架
- 26. 實體框架 - 創建導航屬性
- 27. 實體框架4 CRUD創建錯誤
- 28. 創建關係在實體框架
- 29. 實體框架不創建數據庫
- 30. 實體框架表創建c#
嗨,我有一個問題,如果你可以幫忙嗎? ChangeTracker跟蹤附加到上下文的任何實體。因此,如果我更改實體的任何屬性,它將被標記爲已修改。所以這意味着無論如何都要跟蹤它,而不使用虛擬關鍵字。由於已經通過上下文跟蹤標量屬性,因此需要設置標量屬性。但據說標量屬性標記爲虛擬變化跟蹤。除了我提到的以外,哪些更改跟蹤會影響虛擬關鍵字對標量屬性的影響? – UfukSURMEN 2017-01-01 15:13:27
@UfukSURMEN Ladislav在回答中提到了不同類型的變化追蹤。 「虛擬」屬性啓用動態跟蹤,每次屬性發生變化時都會發出通知。無需使用'virtual'關鍵字,就可以使用快照跟蹤,將每個屬性的值與它們之前在'DetectChanges()'上的值進行比較。你應該使用哪一個是[微妙問題](https://blog.oneunicorn.com/2011/12/05/should-you-use-entity-framework-change-tracking-proxies/)。 – 2017-03-10 10:44:26
@BobSammers感謝您的回覆,以及關於此主題的不錯文章。 – UfukSURMEN 2017-03-11 13:05:45