为啥 EF 4.1 代码首先返回一个 HashSet 而不是一个 Collection
Posted
技术标签:
【中文标题】为啥 EF 4.1 代码首先返回一个 HashSet 而不是一个 Collection【英文标题】:Why does EF 4.1 code first returns a HashSet instead of a Collection为什么 EF 4.1 代码首先返回一个 HashSet 而不是一个 Collection 【发布时间】:2014-02-19 23:17:08 【问题描述】:得到这个:
System.Collections.Generic.HashSet`1[Counter]
期待这个:
ICollection<Counter>
//底层对象:
public virtual ICollection<Counter> Counters get; private set;
我正在使用 DevExpress PropertyGridControl:
dxprg:CollectionDefinition Path="Counters" Type="x:Type efo:Counter"
考虑到我没有在计数器集合上调用任何函数,例如 ToList(),我认为这是 EF 的正常行为,但由于 CollectionDefenition 上的 Path 属性,不清楚如何执行此操作。 我可以创建一个实时对象,用相等的值填充它,初始化集合,然后绑定到它,但这看起来真的很脏。
欢迎任何关于 EF 正在发生的事情的智慧..
【问题讨论】:
【参考方案1】:Entity Framework 需要something 来实现ICollection
它使用HashSet<T>
,因为这是一个相当有效的ICollection<T>
实现。最后,每个实现接口的对象总是一些具体的类。
【讨论】:
好的,这是有道理的。因此,我将不得不在 UI 级别使用 typeof Collection 作为“具体类”来创建对象。对吗? 如果您自己初始化集合,是的,它应该是一个ICollection<T>
实现。 HashSet 也很好用,因为它具有独特的元素,因此它们可以很好地映射到数据库记录。
[NotMapped] public IList<Counter> CountersList get return this.Counters.ToList( );
放置在实体计数器对象中以合理整洁的方式解决了问题。谢谢格特。以上是关于为啥 EF 4.1 代码首先返回一个 HashSet 而不是一个 Collection的主要内容,如果未能解决你的问题,请参考以下文章
EF 4.1 异常“提供程序未返回 ProviderManifestToken 字符串”