考虑以下情景:我的项目中有一个带有 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();
我知道,就实体框架而言,Animal 是一个映射类。我想了解的是内部工作原理使一种情况成为有效选项,而第二种情况则不是。为什么 .Net 不允许使用 Poco 对象的本质?这是有原因的还是只是缺少一个功能?是否有任何解决方法可以使用第一条语句,这样我就可以避免制作数百个基本相同的 dto?