Abrufen von Anfragen mit der aktuellsten erfolgreichen Antwort mit QueryOver von NHibernate
In Szenarien mit einer Eins-zu-viele-Beziehung (HasMany) zwischen Request
und Response
-Entitäten ist das effiziente Abrufen aller Request
-Objekte, die mit ihrem letzten erfolgreichen Response
verknüpft sind, eine häufige Aufgabe. Dies kann elegant mit der QueryOver-API von NHibernate erreicht werden.
Lassen Sie uns ein vereinfachtes Modell untersuchen:
<code class="language-csharp">public class Request { public virtual IList<Response> Responses { get; set; } } public class Response { public virtual DateTime Timestamp { get; set; } public virtual bool Success { get; set; } public virtual Request Request { get; set; } // Added for clarity }</code>
Die folgenden Schritte veranschaulichen, wie die QueryOver-Abfrage erstellt wird:
<code class="language-csharp">// Subquery to identify the maximum timestamp for successful responses per Request Response responseAlias = null; IQueryOver<Response> subquery = QueryOver.Of<Response>(() => responseAlias) .Where(r => r.Request.Id == responseAlias.Request.Id) // Join condition .Select(Projections.Max<Response>(r => r.Timestamp)); // Subquery to filter for successful responses with the maximum timestamp IQueryOver<Response> successSubquery = QueryOver.Of<Response>(() => responseAlias) .WithSubquery.WhereProperty(r => r.Timestamp).Eq(subquery) .Where(r => r.Success == true); // Main query to retrieve Requests Request requestAlias = null; IQueryOver<Request> query = session.QueryOver<Request>(() => requestAlias); query.WithSubquery.WhereExists(() => successSubquery); // Execute the query IList<Request> requests = query.List();</code>
Dieser Ansatz nutzt Unterabfragen, um die Request
-Entitäten effizient zu filtern, basierend auf dem Vorhandensein einer erfolgreichen Response
mit dem neuesten Zeitstempel, und spiegelt so die Funktionalität einer komplexen SQL-Abfrage in der Datenbank selbst wider.
Das obige ist der detaillierte Inhalt vonWie rufe ich Anfragen mit der neuesten erfolgreichen Antwort mithilfe von QueryOver von NHibernate ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!