私は4つの異なるエンティティに参加しながら特定のデータセットを取得しようとしています。私がやったことは、この作業を取得しようとするようにセットアップDTOです:CastleのActiveRecordで複数のエンティティを照会する厳密に型指定されたコレクションを返すにはどうすればよいですか?
string hql = string.Format("select new LatestThread(m.Comment, m.Posted, u.UserName, u.Reputation, t.Id, t.Topic, u.Id, u.Avatar) from Thread as t inner join Message as m on t.Id = m.ThreadId inner join User as u on u.Id = m.PostedById inner join Activity as a on a.Id = t.ActivityId where a.Lineage like '{0}%' order by t.LastPosted desc", activityLineage);
リターンrepository.SimpleQuery(0、10、HQL:
public class LatestThread
{
private readonly string comment;
private readonly DateTime posted;
private readonly string userName;
private readonly int reputation;
private readonly int threadId;
private readonly string topic;
private readonly int userId;
private readonly string avatar;
public LatestThread(string comment, DateTime posted, string userName, int reputation, int threadId, string topic, int userId, string avatar)
{
this.comment = comment;
this.avatar = avatar;
this.userId = userId;
this.topic = topic;
this.threadId = threadId;
this.reputation = reputation;
this.userName = userName;
this.posted = posted;
}
public string Comment
{
get { return comment; }
}
public DateTime Posted
{
get { return posted; }
}
public string UserName
{
get { return userName; }
}
public int Reputation
{
get { return reputation; }
}
public int ThreadId
{
get { return threadId; }
}
public string Topic
{
get { return topic; }
}
public int UserId
{
get { return userId; }
}
public string Avatar
{
get { return avatar; }
}
}
は今、私はそうのようなSimpleQueryを使用すると考えていました);
マイリポジトリ方法は、次のようになります。今では私のLatestThreadクラスの最上部にある[ActiveRecordの]に置くために私を求めています
public virtual IList<T> SimpleQuery<T>(int firstResult, int maxResults, string hql, params object[] parameters)
{
var query = new SimpleQuery<T>(hql, parameters);
query.SetQueryRange(firstResult, maxResults);
return query.Execute();
}
。私がするとき、それはプライマリキーを必要とし、それはちょうど間違ったルートのようです。
私は、DTOでないクラスに与えられたImport属性を参照するビットも読みました。すべての例では、2つのエンティティだけが結合されていますが、4つのエンティティはありません。すべて4にImportを追加する必要がありますか?あるいは、それが読み取り専用DTOクラスであることをARに伝える何かがありますか?私はこれをすべて間違ってやっています。私がやろうとしていることをやるための本当に簡単な方法があります。
TIA!
は私が何をしたいのかを考えではありませんそれは簡単です。あなたはちょっと吹くすべての列を選択する必要が熱心に負荷項目にしたい場合はポストP \t \tから ...のように見えるp.Comments \t \tをフェッチ参加ところp.Id = 1 p.Blog \tをフェッチ参加 – rball
http://trappedinaworldofcode.wordpress.com/2008/03/19/strongly-typed-results-from-nhibernate-html-projection-query/ – rball