2010-08-19 53 views
0

我確實在EF上看到EF Repository模式的常見實現。 然後我帶着這樣的問題來。例如,如果我有法這樣的:EF 4.0存儲庫模式IList <T>或IEnumerable <T>

public IEnumerable<Entity> FindEntity(Expression<Func<Entity, bool> where) {...} 

比我有這樣的情況,我需要根據我的IEnumerable的Findentity實施有IList的,而不是IEnumarable

我可以創造的IList

IList<Entity> myList = new List<Entity>(FindEntity(x = x => x.Date == inputDate)); 

然後我可能在myList實例中具有IList接口(Count等等)的所有優點。

是做到像這個好辦法,也可以有IEnumerable的到的IList或鑄造 的更好的方法也可以作爲一個選項,我可以在庫附加的方法在默認情況下如返回的IList

public IList<Entity> FindEntity(Expression<Func<Entity, bool> where) {....} 

在這種情況下,我可能會刪除IEnumerable FindEntity實現,因爲我可能只需在需要時將IList轉換爲IEnumerable,或者我可以同時實現兩個實現,以避免任何強制轉換。

還有一個問題: 爲什麼常見的Repository實現只有IEnumerable沒有IList,應該有解釋嗎?或者它只是個人喜好?

是的我明白,IEnumerable比IList更輕,但無論如何,有很多情況下我們需要IList而不是IEnumerable,並且在這種方法中,我們需要將IEnumerable轉換爲IList不是嗎?

+0

它可能是它提供了「延期執行」的聲明,但我對EF4或FindEntity知之甚少,不知道是否屬於這種情況。當然,這是你通常使用IEnumerable獲得的東西,無論是在代碼中還是在Linq to SQL中,都是需要思考的東西。 – 2010-08-19 14:43:34

回答

0

我認爲它是一個選擇的事情。 IEnumerable是集合中最不常見的分母。你也可以foreach和寫linq語句。 ICollection或Ilist在圖層中位於較高的位置會暴露出更多可能不想允許的功能,例如向集合中添加某些東西,刪除類似的東西。

相關問題