[英]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的高级功能(如DefiningQuery或QueryView) ,它们也会在模型中产生新的实体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.