0

オブジェクト階層は Parent->Child です (Lazy loading はデフォルトで 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) が必要です。この例は実際には単純ですが、非常に複雑なマッピングと関係があります。

そこに何かアイデアはありますか?

4

1 に答える 1

0

試してみてください:

var realObject = session.GetSessionImplementation()
                        .PersistenceContext.Unproxy(parent.Child)

ただし、コードをこのタイプのチェックに依存させることは、LSPに違反し、保守が困難なコードを作成するため、悪い考えです。

于 2010-08-01T22:48:12.907 に答える