エンティティフレームワークコア:linqのエンティティクエリの投影制限エンティティフレームワークコアを使用する場合、エンティティへのLINQの投影内でエンティティオブジェクトを直接構築する場合、多くの場合、「エンティティまたは複雑なタイプは、エンティティクエリにlinqで構築できません。」
問題:
この例を考えてみましょう:
でこれを実行すると失敗します。
public IQueryable<Product> GetProducts(int categoryID) { return from p in db.Products where p.CategoryID == categoryID select new Product { Name = p.Name }; }
なぜ失敗するのか:productRepository.GetProducts(1).ToList();
問題は、エンティティフレームワークコアがLINQクエリをデータベースコマンドに変換するという事実に由来しています。データベースサーバーには、アプリケーションのクラスとそのコンストラクターに関する知識がありません。 したがって、このクラスのインスタンスを作成することはできません
ソリューション:匿名タイプまたはDTOS ソリューションは、クエリの結果を匿名タイプまたは専用のデータ転送オブジェクト(DTO)に投影することです。Product
メソッド1:匿名タイプの使用これは、より小さなクエリのための迅速でシンプルなソリューションです:
メソッド2:データ転送オブジェクト(DTO)の採用 より複雑なシナリオの場合、または強くタイプのオブジェクトが必要な場合は、DTOを作成します。
匿名タイプまたはDTOに投影することにより、データベースがエンティティクラスをインスタンス化する必要性を回避し、クエリの実行を成功させることを保証します。
以上がLINQにエンティティをエンティティの予測に構築するのはなぜエラーを投げかけるのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。