2011-02-11 71 views
1

我是新來EF和MVC,所以作爲一個培訓,我正在研究像「BlogEngine」。 我在我的項目等使用庫模式和T4作爲普通的方法,返回單個實體或列表的實體(列表)我沒有問題,但我的問題是在我想要我的存儲庫或服務層類的情況下,返回自定義查詢或視圖(sql)。自定義查詢方法的實體框架返回值

讓我想象一下,我想顯示所有類別的列表,包括每個類別的PostCount,或所有帖子的列表,包括CommentCount和一些其他自定義字段。我不知道我必須創建新的類,有這些額外的領域或什麼,(如果我在我的項目中有很多不同的意見,這是否整潔?)

我自己想出方法惠特「動態」返回值。

public dynamic GetAllPostsWithRelatedData() 
    { 
     return (from post in (postRepository.GetAll() as ObjectQuery<Post>) 
          //.Include("Categories").Include("Tags") 
       select new 
       { 
        Categories = post.Categories, 
        Tags = post.Tags, 
        CommentsCount = post.Comments.Count, 
        post.User.UserName, 
        post.Content, 
        post.LastModified, 
        post.Slug, 
        post.Title 
       }); 
    } 

有什麼更好的點子?

回答

1

Imo更好的主意是使用自定義類型進行投影,或者從存儲庫返回IQueryable<Post>,並讓上層定義查詢並直接使用annonymous類型。

dynamic如果在運行時解析動態行爲是有用的,則應該使用關鍵字。不是這種情況。你確切知道你想從你的方法返回什麼類型。

如果您想要定義將經常使用的自定義視圖,您可以在SQL中定義它們,並將它們映射爲新實體(您可以更好地控制SQL)。您還可以使用EF的高級功能,例如DefiningQueryQueryView,這些功能也會導致模型中出現新的實體。

+0

是的,我相信DefiningQuery或正常EF視圖必須是我的解決方案。我想知道爲什麼我想在自己的存儲庫中通過我的自我觀點!任何方式,我發現一個簡單的方法來創建DefinigQuery比雜亂的一個MSDN網站了解,在一些博客。我認爲這可能對像我這樣的其他人有用。這裏是鏈接[link](http://blogs.msdn.com/b/davidebb/archive/2010/10/01/the-easy-way-to-create-an-entity-framework-defining-query。 aspx)謝謝@Ladislav – Eleboys 2011-02-11 20:22:37