Entity Framework Core: Projektionsbeschränkungen in LINQ zu Entitäten Abfragen
Bei der Verwendung von Entity Framework -Kern führt die direkte Konstruktion von Entitätsobjekten innerhalb der Projektion eines LINQ -zu -Entitäten -Abfrage häufig zum Fehler: "Der Entität oder der komplexe Typ können in einem LINQ nicht in die Abfrage der Entitäten konstruiert werden."
Das Problem:
Betrachten Sie dieses Beispiel:
<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>
Ausführen dieser mit productRepository.GetProducts(1).ToList();
fehlschlägen.
Warum es fehlschlägt:
Das Problem beruht auf der Tatsache, dass Entity Framework Core LINQ -Abfragen in Datenbankbefehle übersetzt. Dem Datenbankserver fehlt die Kenntnis der Product
-Klasse Ihrer Anwendung und seines Konstruktors. Daher kann es keine Instanzen dieser Klasse erstellen.
Die Lösung: Projekt zu anonymen Typen oder DTOs
Die Lösung besteht darin, Ihre Abfrageergebnisse entweder in anonyme Typen oder dedizierte Datenübertragungsobjekte (DTOs) zu projizieren.
Methode 1: Verwenden anonymer Typen
Dies ist eine schnelle und einfache Lösung für kleinere Abfragen:
<code class="language-csharp">var products = (from p in db.Products where p.CategoryID == categoryID select new { Name = p.Name }).ToList();</code>
Methode 2: Verwendung von Datenübertragungsobjekten (DTOs)
Für komplexere Szenarien oder wenn Sie starke Objekte benötigen, erstellen Sie ein DTO:
<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>
Wenn Sie an anonyme Typen oder DTOs projizieren, umgehen Sie die Notwendigkeit, dass die Datenbank Ihre Entitätsklassen instanziiert, um eine erfolgreiche Abfrageausführung zu gewährleisten.
Das obige ist der detaillierte Inhalt vonWarum wirft die Konstruktion von Entitäten in LINQ zu Entitäten Prognosen einen Fehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!