Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Semula Kod untuk Memetakan Sifat Anak Tunggal kepada DTO dalam Teras EF?

Bagaimanakah Saya Boleh Menggunakan Semula Kod untuk Memetakan Sifat Anak Tunggal kepada DTO dalam Teras EF?

Susan Sarandon
Lepaskan: 2025-01-23 19:41:09
asal
650 orang telah melayarinya

How Can I Reuse Code for Mapping Single Child Properties to DTOs in EF Core?

Memperkemas Pemetaan DTO untuk Hartanah Anak Tunggal dalam Teras EF

Teras Rangka Kerja Entiti (Teras EF) memudahkan penukaran objek-ke-DTO (Objek Pemindahan Data) menggunakan pepohon ekspresi. Ini berfungsi dengan baik untuk koleksi kanak-kanak, tetapi memetakan sifat anak tunggal mungkin kurang intuitif. Artikel ini meneroka penyelesaian untuk menggunakan semula kod dan mengendalikan senario ini dengan cekap.

Cabaran: Pemetaan Harta Anak Bujang

Memetakan secara langsung sifat anak tunggal kepada DTO selalunya memerlukan penambahan ungkapan manual, yang membawa kepada kod berulang. Pertimbangkan contoh ini:

<code class="language-csharp">public static Expression<Func<Model, ModelDto>> AsDto =>
    model => new ModelDto
    {
        ModelId = model.ModelId,
        ModelName = model.ModelName,
        ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
        AnotherChildModel = new AnotherChildModelDto // Manual mapping here
        {
            AnotherChildModelId = model.AnotherChildModel.AnotherChildModelId
        }
    };</code>
Salin selepas log masuk

Penyelesaian: Memanfaatkan Perpustakaan Luar

Beberapa perpustakaan menyediakan penyelesaian yang elegan dengan menambahkan fungsi seperti .Select() untuk entiti tunggal dengan berkesan, sekali gus membolehkan penggunaan semula kod:

1. LINQKit:

LINQKit membolehkan pengembangan ekspresi, mengendalikan pemetaan anak tunggal secara dinamik.

<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 = model.AnotherChildModel.AsDto() // LINQKit handles this
    };</code>
Salin selepas log masuk

2. NeinLinq:

NeinLinq menawarkan pendekatan serupa menggunakan suntikan lambda.

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

private static Func<Model, ModelDto> _asDto;

private static Expression<Func<Model, ModelDto>> AsDto =>
    model => new ModelDto
    {
        ModelId = model.ModelId,
        ModelName = model.ModelName,
        ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
        AnotherChildModel = model.AnotherChildModel.AsDto() // NeinLinq handles this
    };</code>
Salin selepas log masuk

3. DelegateDecompiler:

DelegateDecompiler menawarkan sintaks yang lebih ringkas menggunakan sifat yang dikira. Ambil perhatian bahawa pendekatan ini mungkin tidak selalu sesuai bergantung pada kerumitan pemetaan anda.

<code class="language-csharp">[Computed]
public static ModelDto AsDto(Model model)
=> new ModelDto
{
    ModelId = model.ModelId,
    ModelName = model.ModelName,
    ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
    AnotherChildModel = model.AnotherChildModel.AsDto() // DelegateDecompiler handles this
};</code>
Salin selepas log masuk

Setiap pustaka memerlukan persediaan dan konfigurasi yang sesuai untuk berfungsi dengan betul dalam projek anda.

Kesimpulan:

Perpustakaan ini menawarkan penyelesaian yang cekap untuk menggunakan semula kod apabila memetakan sifat anak tunggal kepada DTO dalam Teras EF, mengurangkan redundansi dan meningkatkan kebolehselenggaraan. Memilih perpustakaan yang betul bergantung pada keutamaan dan kerumitan projek. Manfaat teras ialah pendekatan yang konsisten dan KERING (Jangan Ulangi Diri Sendiri) untuk pemetaan DTO.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Semula Kod untuk Memetakan Sifat Anak Tunggal kepada DTO dalam Teras EF?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan