Menyelesaikan masalah Rangka Kerja Entiti "Entiti tidak boleh dibina dalam linq ke entiti entiti" ralat
Apabila menggunakan teras Rangka Kerja Entiti, membina pertanyaan yang memproyeksikan secara langsung ke entiti yang dipetakan boleh menyebabkan "entiti tidak dapat dibina dalam linq ke entiti entiti" ralat. Ini biasanya berlaku apabila klausa adat digunakan dengan cara yang menghalang kerangka dari membina entiti dengan betul dalam pertanyaan itu sendiri. select
Penyelesaian: Elakkan unjuran entiti langsung
Kunci untuk menyelesaikan ralat ini adalah untuk mengelakkan memproyeksikan terus ke jenis entiti anda. Sebaliknya, gunakan sama ada jenis tanpa nama atau objek pemindahan data (DTOS).
1. Menggunakan Jenis Tanpa Nama:
Jenis Anonymous menyediakan cara mudah untuk menyusun data yang dipilih. Mereka berguna untuk pertanyaan cepat di mana data hanya diperlukan dalam skop segera.
public IQueryable<object> GetProducts(int categoryID) // Note: Return type is object { return (from p in db.Products where p.CategoryID == categoryID select new { p.Name, p.Price, /* other properties */ }); }
PENTING: Ingat bahawa jenis tanpa nama hanya boleh diakses dalam kaedah di mana ia ditakrifkan.
2. Menggunakan Objek Pemindahan Data (DTOS):
Dengan menggunakan DTOS, anda memisahkan unjuran data dari pengambilan data, dengan berkesan mengelakkan kesilapan dan memberi anda kawalan yang lebih besar ke atas struktur data yang dikembalikan oleh pertanyaan anda. Pendekatan ini biasanya lebih disukai untuk organisasi kod yang lebih baik dan penyelenggaraan.
public class ProductDTO { public string Name { get; set; } public decimal Price { get; set; } // ... 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, Price = p.Price, /* other properties */ }).ToList(); }
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan 'entiti tidak boleh dibina dalam linq ke entiti entiti' ralat dalam rangka kerangka entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!