Ich versuche, eine bestimmte Reihe von Daten zu erhalten, während 4 verschiedene Entitäten zusammen, um dies zu tun. Was ich habe, ist das Einrichten eines DTO getan, um zu versuchen diese Funktion zu erhalten:Wie bekomme ich eine stark typisierte Sammlung zurück, die mehrere Entitäten mit Castles ActiveRecord abfragt?
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; }
}
}
Jetzt dachte ich, ich SimpleQuery wie so verwenden könnte:
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);
Rückkehr repository.SimpleQuery (0, 10, hql);
Meine Repository-Methode wie folgt aussieht:
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();
}
Jetzt ist es für mich zu fragen, setzen [Active] an der Spitze meiner LatestThread Klasse. Wenn ich das mache, will es einen Primärschlüssel, und das scheint nur der falsche Weg zu sein.
Ich habe auch Bits gelesen, die sich auf das Import-Attribut beziehen, das Klassen zugewiesen wird, die nicht das DTO sind. In allen Beispielen sind nur zwei Entitäten verbunden, nicht die 4, die ich habe. Muss ich Import zu allen 4 hinzufügen? Oder gibt es etwas, um AR zu sagen, dass es eine schreibgeschützte DTO-Klasse ist? ODER mache ich das alles falsch und es gibt eine wirklich einfache Möglichkeit zu tun, was ich versuche zu tun.
TIA!
Denken, was ich tun möchte, ist nicht so einfach. Sieht aus wie wenn Sie eifrig Last Einzelteile wünschen Sie alle Spalten auswählen müssen, die irgendwie bläst ... von Post p \t \t p.Comments holen beitreten \t \t holen beitreten p.Blog \t wo p.Id = 1 – rball
http://trappedinaworldofcode.wordpress.com/2008/03/19/strongly-typed-results-from-nibernate-hql-projektion-query/ – rball