簡體   English   中英

強制轉換NHibernate延遲加載的對象(代理問題)

[英]Casting NHibernate Lazy loaded objects (Proxy problem)

我有一個這樣的班級客戶:

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類型是一個代理(延遲加載為true)...

有沒有辦法做到這一點? 我在每個PersonType中都有幾個屬性,因此為每個屬性(Person-> PersonType1)創建一個虛擬/覆蓋不是一個好主意...

謝謝

您可以嘗試熱切地獲取Pers屬性:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM