Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mendapatkan Permintaan dengan Cekap dengan Respons Terkini yang Berjaya Menggunakan NHibernate?

Bagaimana untuk Mendapatkan Permintaan dengan Cekap dengan Respons Terkini yang Berjaya Menggunakan NHibernate?

DDD
Lepaskan: 2025-01-15 07:53:14
asal
901 orang telah melayarinya

How to Efficiently Retrieve Requests with Successful Latest Responses Using NHibernate?

Mengoptimumkan Pertanyaan NHibernate: Mendapatkan semula Permintaan dengan Respons Terkini yang Berjaya

Artikel ini menunjukkan pertanyaan NHibernate yang cekap untuk mendapatkan Request entiti di mana Response terbaharu menunjukkan kejayaan. Model data kami termasuk entiti Request dengan koleksi Response entiti. Setiap Response mempunyai sifat Timestamp dan boolean Success.

Penyelesaian ini menggunakan pendekatan subkueri berbilang peringkat menggunakan API QueryOver NHibernate untuk kebolehbacaan dan kebolehselenggaraan yang dipertingkatkan.

Subkueri dalam (maxSubquery) mengenal pasti cap masa maksimum untuk setiap Request menggunakan pengumpulan dan pengagregatan. Subkueri kedua (successSubquery) kemudian menapis cap masa maksimum ini, memilih hanya Request ID yang mana Response yang sepadan menandakan Success sebagai benar.

Akhir sekali, pertanyaan luar mendapatkan semula entiti Request, menapis hasil berdasarkan ID yang dikenal pasti dalam successSubquery. Ini memastikan bahawa hanya permintaan dengan respons terkini yang berjaya dilengkapkan dikembalikan.

Berikut ialah kod C# yang melaksanakan pertanyaan yang dioptimumkan ini:

<code class="language-csharp">Response responseAlias = null;
var maxSubquery = QueryOver.Of<Response>()
    .SelectList(l => l
        .SelectGroup(r => r.RequestId)
        .SelectMax(r => r.Timestamp)) //Using Timestamp instead of DateTime for clarity
    .Where(r => r.RequestId == responseAlias.RequestId)
    .Where(Restrictions.EqProperty(
        Projections.Max<Response>(r => r.Timestamp),
        Projections.Property(() => responseAlias.Timestamp)));

var successSubquery = QueryOver.Of<Response>(() => responseAlias)
    .Select(r => r.RequestId)
    .WithSubquery
    .WhereExists(maxSubquery)
    .Where(r => r.Success); //Simplified Success check

var query = session.QueryOver<Request>();
query.WithSubquery
    .WhereProperty(r => r.Id) // Assuming Id is the primary key
    .In(successSubquery);

var requestsWithSuccessfulLatestResponses = query
    .List<Request>();</code>
Salin selepas log masuk

Pendekatan ini mendapatkan semula data yang diperlukan dengan cekap, mempamerkan kuasa NHibernate dalam mengendalikan perhubungan data yang kompleks dan pengoptimuman pertanyaan. Penggunaan alias meningkatkan kebolehbacaan, dan kod diperkemas untuk kejelasan. Perhatikan penggunaan Timestamp dan bukannya DateTime untuk konsistensi.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Permintaan dengan Cekap dengan Respons Terkini yang Berjaya Menggunakan NHibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan