将实体映射到匿名类型或使用无参数构造函数的类型很容易:
context.EntitiesSet.Select( entity => new MyClass { Prop = entity.Id } );
但是如果MyClass
实现IEnumerable
了接口,那么 EF 会抛出NotSupportedException
.
我想知道这个奇怪的地方有什么意义。
将实体映射到匿名类型或使用无参数构造函数的类型很容易:
context.EntitiesSet.Select( entity => new MyClass { Prop = entity.Id } );
但是如果MyClass
实现IEnumerable
了接口,那么 EF 会抛出NotSupportedException
.
我想知道这个奇怪的地方有什么意义。
我认为这与这个问题有关:How do I load related entity of type IEnumerable<T>,其中询问为什么导航属性无法实现IEnumerable
。
在当前的 EF 6 源代码中,检查是否支持实现类型。那里只在评论中说
// 不支持实现 IEnumerable 的类型
那里没有太多解释。
但是,对于集合属性,我可以看到为什么至少需要 s 是有意义ICollection
的,因为可以从集合中添加和删除对象是必不可少的(IEnumerable
没有Add
和Delete
方法)。
我认为投影类型实现的情况IEnumerable
要么被认为太不常见而无法支持,要么被忽略了。