【问题标题】:Entity Framework return value of custom Query methods自定义查询方法的实体框架返回值
【发布时间】:2011-06-25 16:48:52
【问题描述】:

我是 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
                });
    }

有更好的想法吗?

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

    Imo 更好的想法是使用自定义类型进行投影或从您的存储库返回 IQueryable&lt;Post&gt; 并让上层定义查询并直接使用匿名类型。

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

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

    【讨论】:

    • 是的,我相信 DefiningQuery 或普通的 EF 视图必须是我的解决方案。我想知道为什么我想在我的存储库中自己创建视图!除了在一些博客中学到的凌乱的 MSDN 网站之外,我找到了一种创建 DefinigQuery 的简单方法。我认为它可能对像我这样的其他人有用。这是链接link 谢谢@Ladislav
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2018-01-11
    相关资源
    最近更新 更多