我有对象层次结构Parent-> Child (默认情况下,延迟加载设置为true) 现在我正在从数据库加载所有Parent对象。所有子对象都将具有ChildProxyGUID类型。
然后我写了
IList<Parent> parentList = NHibernateHelper.List<Parent>();
foreach(Parent parent in parentList)
{
if(!NHibernateUtil.IsInitialized(parent.Child))
{
NHibernateUtil.Initialize(parent.Child);
if(parent.Child.GetType() != typeof(Child)) //parent.Child.GetType() return me proxy type
throw new ArgumentException("wrong type");
}
}
如何将parent.Child转换为Real类型“Child”。由于系统检查,我需要真正的类型(Child)。 这个例子在现实生活中很简单我有一个非常复杂的映射和关系。
那里有什么想法吗?
答案 0 :(得分:0)
尝试:
var realObject = session.GetSessionImplementation()
.PersistenceContext.Unproxy(parent.Child)
但是,让代码依赖此类检查是一个不错的主意,因为它违反了LSP,创建了难以维护的代码。