2014-02-19 82 views
0

聞聽此事的:爲什麼EF 4.1代碼首先返回一個HashSet而不是Collection

System.Collections.Generic.HashSet`1[Counter] 

期待這樣的:

ICollection<Counter> 

//底層對象:

public virtual ICollection<Counter> Counters { get; private set; } 

我m使用DevExpress PropertyGridControl:

dxprg:CollectionDefinition Path="Counters" Type="{x:Type efo:Counter}" 

我認爲EF的這種正常行爲考慮到我沒有在像ToList()這樣的計數器集合上調用任何函數,但由於CollectionDefenition上的Path屬性並不清楚如何實現。 我可以創建一個實時對象,用相同的值填充它,初始化集合,然後綁定它,但看起來很髒。

上正在發生的事情在這裏關於EF任何智慧是值得歡迎的..

回答

2

實體框架需要東西實施ICollection它使用HashSet<T>,因爲這是一個相當有效ICollection<T>實現。最後,實現接口的每個對象都是一些具體的類。

+0

好的,這是有道理的。所以,我將不得不在UI級別創建一個類型爲Collection的對象作爲「具體類」。 這是正確的嗎? – VipX1

+0

如果你自己初始化集合,是的,它應該是一個'ICollection '的實現。 HashSet也很好用,因爲它具有獨特的元素,所以它們很好地映射到數據庫記錄。 –

+0

'[NotMapped] public IList CountersList {return this.Counters.ToList(); }放入實體計數器對象以合理的方式解決問題。謝謝格特。 – VipX1