Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Menukar Entiti kepada DTO dengan Cekap dalam Teras EF, Termasuk Hartanah Anak Entiti Tunggal?

Bagaimanakah Kami Boleh Menukar Entiti kepada DTO dengan Cekap dalam Teras EF, Termasuk Hartanah Anak Entiti Tunggal?

Patricia Arquette
Patricia Arquetteasal
2025-01-23 19:52:26689semak imbas

How Can We Efficiently Convert Entities to DTOs in EF Core, Including Single-Entity Child Properties?

Gunakan kod boleh guna semula untuk transformasi DTO tersuai dalam EF Core: subsifat entiti tunggal

Pernyataan Masalah:

Bagaimana untuk memanjangkan entiti kepada penukaran objek DTO untuk memasukkan sub-sifat bukan koleksi apabila menanyakan data menggunakan Teras Rangka Kerja Entiti?

Pelaksanaan:

Dalam Teras EF, ungkapan digunakan untuk menukar entiti kepada DTO, yang berfungsi dengan baik untuk entiti utama dan subkoleksinya. Walau bagaimanapun, menggunakan pendekatan ini kepada subsifat bukan kolektif telah terbukti mencabar.

Penyelesaian:

Untuk menyelesaikan masalah ini, kita boleh menggunakan perpustakaan seperti LINQKit, NeinLinq atau DelegateDecompiler. Perpustakaan ini membolehkan kami mentakrifkan fungsi transformasi yang mengandungi entiti utama dan sifat anak tambahan.

Contoh:

Menggunakan LINQKit:

<code class="language-csharp">[Expandable(nameof(AsDtoImpl))]
public static ModelDto AsDto(Model model)
{
   _asDtoImpl ??= AsDtoImpl().Compile();
   return _asDtoImpl(model);
}

private static Func<Model, ModelDto> _asDtoImpl;

private static Expression<Func<Model, ModelDto>> AsDtoImpl =>
    model => new ModelDto
    { 
        ModelId = model.ModelId,
        ModelName = model.ModelName,
        ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
        AnotherChildModel = new AnotherChildModelDto
        {
            AnotherChildModelId = model.AnotherChildModel.AnotherChildModelId //修正此处
        }
    };</code>

Pertanyaan boleh dikembangkan sebelum pelaksanaan menggunakan fungsi AsExpandable() perpustakaan:

<code class="language-csharp">dbContext.Models
   .Where(m => SomeCriteria)
   .Select(m => Model.AsDto(m))
   .AsExpandable()
   .ToList();</code>

Untuk LINQKit, proses ini boleh dipermudahkan dengan mendayakan pengembangan ungkapan secara global dalam konfigurasi DbContext. Perpustakaan lain seperti NeinLinq dan DelegateDecompiler menyediakan kaedah yang serupa. Ambil perhatian bahawa cara atribut AnotherChildModel diakses dalam kod sampel telah diubah suai untuk menggambarkan dengan lebih tepat proses mendapatkan model.AnotherChildModel daripada AnotherChildModelId. Ini mengandaikan bahawa AnotherChildModel ialah objek dan bukan ID yang berasingan.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menukar Entiti kepada DTO dengan Cekap dalam Teras EF, Termasuk Hartanah Anak Entiti Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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