J'essaie d'obtenir un ensemble de données spécifique en rejoignant 4 entités différentes pour le faire. Ce que je l'ai fait est configuré un DTO pour essayer d'obtenir ce travail:Comment récupérer une collection fortement typée qui interroge plusieurs entités avec ActiveRecord de Castle?
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; }
}
}
Maintenant, je pensais que je pouvais utiliser SimpleQuery comme ceci:
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 retour (0, 10, hql)
Ma méthode référentiel ressemble:
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();
}
Maintenant, il est demander pour moi de mettre [ActiveRecord] au sommet de ma classe LatestThread. Quand je fais cela, il veut une clé primaire, et cela semble juste être la mauvaise route.
J'ai également lu des bits qui font référence à l'attribut Import donné aux classes qui ne sont pas le DTO. Dans tous les exemples, il n'y a que deux entités qui sont jointes, pas les 4 que j'ai. Ai-je besoin d'ajouter Import à tous les 4? Ou y at-il quelque chose à dire à AR que c'est une classe DTO en lecture seule? Ou est-ce que je fais tout faux et il y a une manière vraiment facile de faire ce que j'essaye de faire.
TIA!
Penser ce que je veux faire est de ne pas C'est facile. On dirait que si vous voulez des éléments de charge désireux que vous devez sélectionner toutes les colonnes qui souffle un peu ... de post p \t \t join fetch p.Comments \t \t join fetch p.Blog \t où p.Id = 1 – rball
http://trappedinaworldofcode.wordpress.com/2008/03/19/strongly-typed-results-from-nhibernate-hql-projection-query/ – rball