【问题标题】: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 正在发生的事情的智慧..

【问题讨论】:

    标签: ef-code-first devexpress entity-framework-4.1 hashset


    【解决方案1】:

    Entity Framework 需要something 来实现ICollection 它使用HashSet&lt;T&gt;,因为这是一个相当有效的ICollection&lt;T&gt; 实现。最后,每个实现接口的对象总是一些具体的类。

    【讨论】:

    • 好的,这是有道理的。因此,我将不得不在 UI 级别使用 typeof Collection 作为“具体类”来创建对象。对吗?
    • 如果您自己初始化集合,是的,它应该是一个ICollection&lt;T&gt; 实现。 HashSet 也很好用,因为它具有独特的元素,因此它们可以很好地映射到数据库记录。
    • [NotMapped] public IList&lt;Counter&gt; CountersList { get { return this.Counters.ToList( ); } } 放置在实体计数器对象中以合理整洁的方式解决了问题。谢谢格特。
    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多