我是EF和MVC的新手,所以作为一项培训我正在研究像“BlogEngine”这样的东西。 我在我的项目等中使用存储库模式和T4作为返回单个实体或实体列表的常规方法(List)我没有问题,但我的问题是在我需要我的存储库或服务层类的情况下,返回自定义查询或者观点(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
});
}
任何更好的想法?
答案 0 :(得分:1)
IQueryable<Post>
,让上层定义查询并直接使用匿名类型。
当在运行时解析动态行为很有用时,应使用 dynamic
关键字。不是这种情况。您确切地知道要从方法返回的类型。
如果要定义将经常使用的自定义视图,您也可以在SQL中定义它们并将它们映射为新实体(您可以更好地控制SQL)。您还可以使用EF的高级功能,例如DefiningQuery或QueryView,这也会在您的模型中产生新的实体。