2009-07-13 8 views
2

DTOにコレクションプロパティを設定する必要があり、これを行う際に何か情報を見つけることができません。nhibernateでDTOメンバーのコレクションを取得するにはどうすればよいですか?

私はこのようにそれを実行しようとしました:

ICriteria selectCriteria = Session.CreateCriteria<DataRun>() 
      .SetProjection(Projections.ProjectionList() 
       .Add(Projections.Property("SomeCollection"), "Collection")) 
      .SetResultTransformer(Transformers.AliasToBean<MyDto>()); 

しかしMyDto.Collectionは常にnullです。私はこれを間違ってやっていますか?これも可能ですか?

私はもともとSubQueryでこれを行う予定だったので、DTOのコレクションに他のDTOを埋め込むことができましたが、サブクエリの結果に1行以上の結果があり、Sqlitそれは好きではない(例外をスローする)。ここで正しいことは何ですか?

+0

ある一対多あなたのマッピングで行うが、私は本当にわからないんだけどされるべきです。マッピングファイルを投稿できますか? –

+0

私は1対多数をやっていますが、マップされたエンティティはこの種のものでうまく動作しますが、マッピングされたエンティティを戻したくないので、たくさんのプロパティを持つDTOが必要です。それらが使用されるビュー。 – mockobject

答えて

0

私は、次の構文で私のプロジェクトでコレクションのプロパティを取得しました:IDは、親オブジェクトのキーである

public IList<ChildCollectionType> GetChildObjectsByParentId(Int32 id) 
{ 
    ISession session = GetSession();//Get NHibernate session routine 
    return session.Load<ParentDTO>(id).ChildCollectionProperty; 
} 

+0

申し訳ありませんが、元の質問を正しく読んでいませんでした。カスタムDTOにコレクションプロパティを設定しようとしていたことに気づいていませんでした。 aliasToBeanなどの問題を抱えている人たちの記事があります。例:http://stackoverflow.com/questions/4504054/simple-hibernate-aliastobean-not-working –

0

カスタム変換を使用することができます。

ICriteria selectCriteria = Session.CreateCriteria<DataRun>() 
      .SetProjection(Projections.ProjectionList() 
       .Add(Projections.Property("SomeCollection"), "Collection")) 
      .TransformUsing(new CustomTransformer()); 

は、ここで私はあなたがやろうとしていると思うカスタムトランス実装

public class CustomTransformer : IResultTransformer 
    { 
     public System.Collections.IList TransformList(System.Collections.IList collection) 
     { 
      return collection; 
     } 

     public object TransformTuple(object[] tuple, string[] aliases) 
     { 
      return new MyDto 
      { 
       //map your data to dto and convert to data type if needed 
       YourProperty1 = tuple[0], 
       YourProperty12 = (int)tuple[1] 
      }; 
     } 
    } 
関連する問題