Rumah >pembangunan bahagian belakang >C++ >Mengapa membina entiti di Linq ke unjuran entiti membuang kesilapan?

Mengapa membina entiti di Linq ke unjuran entiti membuang kesilapan?

Linda Hamilton
Linda Hamiltonasal
2025-02-01 15:06:11579semak imbas

Why Does Constructing Entities in LINQ to Entities Projections Throw an Error?

Rangka Kerja Entiti Teras: Batasan Unjuran di Linq ke Entiti Queries

Apabila menggunakan teras Rangka Kerja Entiti, secara langsung membina objek entiti dalam unjuran linq ke pertanyaan entiti sering membawa kepada ralat: "entiti atau jenis kompleks tidak dapat dibina dalam linq ke pertanyaan entiti."

Isu:

Pertimbangkan contoh ini:

Melaksanakan ini dengan
<code class="language-csharp">public IQueryable<Product> GetProducts(int categoryID)
{
    return from p in db.Products
           where p.CategoryID == categoryID
           select new Product { Name = p.Name };
}</code>
akan gagal.

productRepository.GetProducts(1).ToList();

Kenapa gagal:

Masalahnya berpunca dari fakta bahawa teras kerangka entiti menerjemahkan pertanyaan LINQ ke dalam arahan pangkalan data. Pelayan pangkalan data tidak mempunyai pengetahuan kelas

aplikasi anda dan pembina. Oleh itu, ia tidak dapat membuat contoh kelas ini.

Product

Penyelesaian: Projek kepada Jenis Anonymous atau DTOS

Penyelesaiannya adalah untuk memproyeksikan hasil pertanyaan anda ke dalam jenis tanpa nama atau objek pemindahan data khusus (DTOS).

Kaedah 1: Menggunakan jenis tanpa nama

Ini adalah penyelesaian yang cepat dan mudah untuk pertanyaan yang lebih kecil:

<code class="language-csharp">var products = (from p in db.Products
               where p.CategoryID == categoryID
               select new { Name = p.Name }).ToList();</code>
Kaedah 2: Menggunakan objek pemindahan data (DTOS)

Untuk senario yang lebih kompleks atau apabila anda memerlukan objek yang sangat ditaip, buat DTO:

Dengan memproyeksikan kepada jenis tanpa nama atau DTO, anda mengelakkan keperluan pangkalan data untuk meniru kelas entiti anda, memastikan pelaksanaan pertanyaan yang berjaya.
<code class="language-csharp">public class ProductDTO
{
    public string Name { get; set; }
    // Add other properties as needed
}

public List<ProductDTO> GetProducts(int categoryID)
{
    return (from p in db.Products
            where p.CategoryID == categoryID
            select new ProductDTO { Name = p.Name }).ToList();
}</code>

Atas ialah kandungan terperinci Mengapa membina entiti di Linq ke unjuran entiti membuang kesilapan?. 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