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!