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
Lepaskan: 2025-02-01 15:06:11
asal
627 orang telah melayarinya

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
public IQueryable<Product> GetProducts(int categoryID)
{
    return from p in db.Products
           where p.CategoryID == categoryID
           select new Product { Name = p.Name };
}
Salin selepas log masuk
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:

var products = (from p in db.Products
               where p.CategoryID == categoryID
               select new { Name = p.Name }).ToList();
Salin selepas log masuk
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.
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();
}
Salin selepas log masuk

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