繁体   English   中英

自定义查询方法的实体框架返回值

[英]Entity Framework return value of custom Query methods

我是EF和MVC的新手,因此,作为培训,我正在研究“ BlogEngine”之类的内容。 我在项目等中使用存储库模式和T4等作为返回单个实体或实体列表(列表)的常规方法,我没有问题,但是我的问题是在需要存储库或服务层类,返回自定义查询的情况下或views(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
                });
    }

还有更好的主意吗?

更好的主意是使用自定义类型进行投影或从存储库返回IQueryable<Post> ,并让上层定义查询并直接使用匿名类型。

当在运行时具有动态行为的解析很有用时,应使用dynamic关键字。 不是这种情况。 您确切地知道要从方法中返回什么类型。

如果要定义经常使用的自定义视图,则也可以在SQL中定义它们并将其映射为新实体(您可以更好地控制SQL)。 您还可以使用EF的高级功能(如DefiningQueryQueryView) ,它们也会在模型中产生新的实体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM