2009-11-10 21 views
0

我有一類客戶端這樣的:鑄造的NHibernate懶加載的對象(代理問題)

public class Client{ 
    public Person Pers { get; set; } 
} 

而且我有2個聯絡人的子類:

public class PersonType1 : Person {...} 
public class PersonType2 : Person {...} 

現在我裝的客戶端。 ..,我需要得到PersonType1或PersonType2屬性..

我試過:

var _pj = ((PersonType1) _client.Pers); 

但它不工作,因爲_client.Pers類型是代理(延遲加載真)...

有沒有辦法做到這一點?我在每個PersonType幾個屬性,所以它不是爲每個屬性(人 - > PersonType1)虛擬/清除一個好主意......

感謝

+0

這是否工作,甚至爲lazy = 「假」?如果'Pers'是PersonType1的代理類型,那麼該類型的演員將會根據多態性的性質工作。我的猜測是它沒有返回'PersonType1',而是'Person'。 – Trent 2009-11-10 19:00:37

回答

2

你可以試着預先抓取Pers屬性:

var client = session 
    .CreateCriteria<Client>() 
    .CreateCriteria("Pers", JoinType.LeftOuterJoin) 
    .Add(Expression.IdEq(1)) 
    .UniqueResult<Client>(); 
var pj = (PersonType1)client.Pers; 
0

如果您在服務器上使用NH,並將對象移動到客戶端,則不能使用延遲加載。 NH知道(在服務器中)對客戶端沒有幫助,客戶端既不具備Session,也不知道如何在需要時獲取額外的數據。