2009-01-29 29 views
0

假設您有一個包含文章的表格,並且您希望顯示它們的列表,但不包括實際的文章文字。當您使用LINQ或實體框架獲得文章對象的列表時,是否還有很多與獲取文本列相關的開銷?我假設當你開始枚舉列表時,文章文本將被存儲在內存中,直到對象被拋棄。將大型列作爲實體的一部分時,LINQ或實體框架是否有任何開銷?

那麼創建一個不包含文本列的中介對象是否合理?如果是這樣,你會如何做到這一點?在你的DAL中創建一個類,讓ORM通過設置一個存儲過程或者其他一些過程來自動創建一個類?

回答

0

如果你不需要數據,你應該創建一個不同的類型。按照慣例,我通常將這種類別命名爲「nnnInfo」或「nnnListItem」。要在L2S中創建ArticleListItem,只需簡單地將該表拖到DataContext設計器中即可。然後將其從'Article1'重命名爲'ArticleListItem',並刪除不需要的屬性(rt click,delete)。在EF中,這個過程是相似的。正如克雷格所言,您可以使用匿名類型,但通過創建具體類型,您可以在整個應用中重複使用,通過服務公開等。

第二種方法是手動創建類並編寫擴展方法返回ArticleListItem:

public static IQueryable<ArticleListItem> ToListItems(this IQueryable<Article> articles) 
{ 
return from a in articles select new ArticleListItem{ Title = a.Title, ...} 
} 

這將允許你「投」反對任何物品,ArticleListItem查詢...

1

開銷不是很大(只是通過電線發送數據的成本),但如果您確實不需要數據,請不要返回它。我覺得最簡單的方法是使用匿名類型:

from a in Context.Articles 
select new {Name = a.Name, Author = a.Author}; 

既然你沒有真正物化任何條文的情況下,實體框架將不再需要填寫一個實例的所有屬性。