次のシナリオを考えてみましょう: 私のプロジェクトには、Poco オブジェクト Animal を使用したコード ファースト モデルがあります。動物の行には 50 個のプロパティがあり、アプリケーションにはそのうちの 5 個だけが必要です。そこで、この 5 つのプロパティを Poco オブジェクトに射影してみます。
List<Animal> animals = (from an in dbContext.Animal
where an.IsMammal
select new Animal { Id = an.Id , Color = an.Color , Height = an.Height, Width = an.Width , Hair = an.Hair }).ToList();
Animal は StrongTyped オブジェクトであり、SQL に変換できません。
一方、新しい Poco を宣言すると、Animal とまったく同じように AnimalDTO と言う
List<AnimalDTO> animals = (from an in dbContext.Animal
where an.IsMammal
select new AnimalDTO { Id = an.Id , Color = an.Color , Height = an.Height, Width = an.Width , Hair = an.Hair }).ToList();
これは、Entity Framework に関する限り、Animal がマップされたクラスであるために発生することを理解しています。私が理解したいのは、1つのケースを有効なオプションにし、2番目のケースを無効にする内部の仕組みです。.Net が Poco オブジェクトの使用を本質的に許可しないのはなぜですか? それには理由がありますか、それとも単に機能が不足しているだけですか? 何百もの本質的に同一の dto を作成することを回避できるように、最初のステートメントを使用する回避策はありますか?