转换NHibernate Lazy加载对象(代理问题)

时间:2009-11-10 17:46:30

标签: c# 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类型是一个代理(Lazy加载为true)......

有办法吗?我在每个PersonType中都有几个属性,因此为每个属性(Person-> PersonType1)创建虚拟/覆盖不是一个好主意......

由于

2 个答案:

答案 0 :(得分:2)

您可以尝试急切地获取Pers属性:

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

答案 1 :(得分:0)

如果在服务器中使用NH,并将对象移动到客户端,则不能使用延迟加载。 NH知道(在服务器中)无法帮助客户端,客户端既没有会话也没有知识如何在需要时获取额外数据。