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