ホームページ > バックエンド開発 > C++ > LINQにエンティティをエンティティの予測に構築するのはなぜエラーを投げかけるのですか?

LINQにエンティティをエンティティの予測に構築するのはなぜエラーを投げかけるのですか?

Linda Hamilton
リリース: 2025-02-01 15:06:11
オリジナル
627 人が閲覧しました

Why Does Constructing Entities in LINQ to Entities Projections Throw an Error?

エンティティフレームワークコア: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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート