为什么 EF 不支持对实现 IEnumerable 的类型进行投影

本文关键字:类型 投影 IEnumerable EF 不支持 实现 为什么 | 更新日期: 2023-09-27 18:32:14

很容易将实体映射到非同名类型或使用无参数构造函数映射到类型:

context.EntitiesSet.Select( entity => new MyClass { Prop = entity.Id } );

但是,如果MyClass实现了IEnumerable接口,则EF会抛出NotSupportedException

我想知道这种奇怪有什么意义。

为什么 EF 不支持对实现 IEnumerable 的类型进行投影

我认为它与这个问题有关:如何加载 IEnumerable 类型的相关实体,其中询问为什么导航属性无法实现 IEnumerable .

在当前的 EF 6 源中,检查类型是否支持具体化。它只在评论中说

不支持实现 IEnumerable 的类型

那里没有太多解释。

但是,对于集合属性,我可以理解为什么至少需要 ICollection s 是有意义的,因为必须在集合中添加和删除对象(IEnumerable没有AddDelete方法)。

我认为,投影类型实现IEnumerable的情况要么被认为太罕见而无法支持,要么只是被忽视了。