Entity Framework возвращает значение пользовательских методов запроса - PullRequest
1 голос
/ 11 февраля 2011

Я новичок в 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
                });
    }

есть идеи получше?

1 Ответ

1 голос
/ 11 февраля 2011

Пожалуй, лучшая идея - использовать пользовательский тип для проекций или вернуть IQueryable<Post> из вашего репозитория и позволить верхнему уровню определять запрос и напрямую использовать анонимный тип.

dynamic ключевое слово следует использовать, когда полезно иметь динамическое поведение с разрешением во время выполнения. Это не вариант. Вы точно знаете, какой тип вы хотите вернуть из вашего метода.

Если вы хотите определить пользовательские представления, которые будут часто использоваться, вы также можете определить их в SQL и отобразить их как новую сущность (у вас больше контроля над SQL). Вы также можете использовать расширенные функции EF, такие как DefiningQuery или QueryView , которые также приводят к созданию новой сущности в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...