2011-02-11 64 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