3
A
回答
7
你將不得不看NHibernate的源代碼的更多細節,但我的理解如下:延遲加載是通過用一個類來實現的在運行時生成的代理。代理從類繼承,以便它可以'攔截'方法調用並延遲加載實際數據。只有方法和屬性是虛擬的,這個攔截纔會起作用,因爲客戶端代碼通過對類的引用來調用它們。客戶端代碼可能不知道其really使用代理(從該類派生)的事實。實際延遲加載邏輯是複雜得多,但這大概是怎麼回事:
public class Customer {
public virtual String Name {
get { return _name; }
}
}
// code like this gets generated at runtime:
public class CustomerProxy7461293476123947123 : Customer {
private Customer _target;
public override String Name {
get {
if(_target == null){
_target = LoadFromDatabase();
}
return _target.Name;
}
}
}
這樣的數據只會得到加載時客戶端實際上所謂的「名」:
Customer customer = Session.Load<Customer>(1); // <-- proxy is returned
// or
Customer customer = salesman.FavoriteCustomer; // <-- proxy is returned
...
String name = customer.Name; // <-- proxy's Name will be called, loading data
類似機制用於集合,除了集合不需要在運行時生成。 NHibernate有內置的持久化集合,可以輕鬆加載項目。
相關問題
- 1. nhibernate延遲加載
- 2. Silverlight:從nHibernate延遲加載
- 3. NHibernate:延遲加載IUserType
- 4. JSON.NET和nHibernate延遲加載集合
- 5. REST,Json和NHibernate延遲加載
- 6. NHibernate會話管理和延遲加載
- 7. wcf序列化和nhibernate延遲加載
- 8. 深度加載值對象的問題(前端延遲加載?)
- 9. NHibernate延遲加載 - 會話關閉後
- 10. NHibernate的延遲加載問題
- 11. NHibernate的延遲加載錯誤
- 12. NHibernate的延遲加載與Ignore.NotFound
- 13. Nhibernate延遲加載一組不工作
- 14. 防止nHibernate中的延遲加載
- 15. 延遲加載
- 16. 延遲加載
- 17. 延遲加載
- 18. 春庫和延遲加載
- 19. SQLAlchemy.declarative和延遲列加載
- 20. IQueryable和延遲加載
- 21. Hibernate延遲加載和Hazelcast
- 22. 的jquery - 延遲加載 - 設置延遲
- 23. nHibernate多對多映射和延遲加載
- 24. 延遲加載3.2.6
- 25. 延遲加載MirrorType
- 26. RecyclerView延遲加載
- 27. 延遲加載DLL
- 28. Firebase延遲加載
- 29. UIwebview延遲加載
- 30. 延遲加載CollectionViewSource?
你假裝我們深入解釋,僅僅解釋一點就不夠,那麼如果你覺得自己更像自己呢?或者我應該複製粘貼NH文檔。你的問題聽起來對我來說有點粗魯。 –
NH文檔解釋瞭如何使用NH。我想用這兩個問題想知道幕後發生了什麼。 –
爲什麼你認爲在面試中問這個很荒謬?如果面試官想評估你使用NHibernate的專業水平,爲什麼不呢? –