Rumah >pembangunan bahagian belakang >C++ >Mengapa membina entiti di Linq ke unjuran entiti membuang kesilapan?
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();
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
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!