Использование шаблона хранилища с Entity Framework (витрина магазина mvc) - PullRequest
13 голосов
/ 30 марта 2009

Кто-нибудь может протянуть руку помощи? Я смотрел видео для витрины магазина MVC и создал свой собственный веб-сайт, используя эти методы, то есть DDD, шаблон репозитория, но я хочу использовать Entity Framework.

В интерфейсах он возвращает IQueryable, но с Entity Framework я должен вместо этого возвращать ObjectQuery? - Я буду использовать LINQ.

Также в примере сохраненного фронта это выглядит примерно так: IQueryable GetCategories ();

Также в магазине MVC класс Category был классом встроенной сущности (стандартным классом), но в Entity Framework эти классы предварительно собраны в контексте объекта - не так ли?

Значит, мне нужно их построить?

Я немного растерялся. Если у кого-нибудь есть полезный пример или код, это будет очень полезно.

Как я уже сказал, я смотрел видео из витрины магазина MVC с использованием linq2sql, но очень хотел бы использовать Entity Framework.

Есть идеи?

Спасибо

Кузница

Ответы [ 6 ]

9 голосов
/ 30 марта 2009

Позвольте мне ответить на ваши вопросы по одному:

Ваши репозитории должны возвращать IQueryable , не ObjectQuery. Причина в том, что вся цель шаблона репозитория состоит в том, чтобы абстрагироваться от особенностей вашего хранилища данных. Это позволяет вам делать такие вещи, как замена фиктивного хранилища, когда вы тестируете свои контроллеры. Если вы заставите репозиторий вернуть ObjectQuery, то вы не абстрагируете Entity Framework. Другой способ сказать, что пользователи вашего хранилища не должны знать, насколько это возможно, что Entity Framework выполняет отображение O / R.

Чтобы использовать символы «больше» и «меньше» в тексте абзаца в «Переполнении стека», вы должны экранировать их, как в HTML, т.е.

<

Вам не нужно делать это в блоке кода; в кодовых блоках вы просто вводите символ меньше или больше символа.

6 голосов
/ 30 марта 2009

Может быть, если вы видите учебник Contact Manager на сайте http://www.asp.net/learn/mvc/#MVC_SampleApp, они используют Шаблон репозитория и Entity Framework.

5 голосов
/ 04 мая 2009

Я начал, как и вы, несколько недель назад, вы увидите, что работать с EF довольно просто. Мой проект небольшой, поэтому я использую сущности, сгенерированные EF, в качестве классов моей модели, и вы можете добавить свою собственную логику к ним, используя частичный класс.

Вот простой метод одного из моих репозиториев, например:

    /// <summary>
    /// Finds a user by it's credentials
    /// </summary>
    /// <param name="oUser"></param>
    /// <returns></returns>
    public User FindByCredentials(string username, Byte[] password)
    {
        User user = null;

        if (!Validators.IsStringEmptyOrNull(username))
        {
            user = this.FindByCredentialsQuery(username, password).FirstOrDefault<User>();
        }

        return (Validators.IsNull(user)) ? new User() : user;

    }


    /// <summary>
    /// Finds a user by it's credentials
    /// </summary>
    /// <param name="username"></param>
    /// <param name="password"></param>
    /// <returns></returns>
    protected IQueryable<User> FindByCredentialsQuery(string username, Byte[] password)
    {
        var query = from Users in this.UserDataContext.Users
                    where
                        (Users.Username == username) &&
                        (Users.Password == password) &&
                        (Users.Enabled == true)
                    select Users;


        return query;
    }

Обратите внимание, что я использую IQueryable только внутри репозитория и возвращаю только список запрошенных сущностей. Таким образом, я могу контролировать, что запрос к БД всегда выполняется внутри Repo.

3 голосов
/ 11 мая 2011

Новая серия руководств по MVC включает пример репозитория, который включает методы с параметрами, которые позволяют вам задавать фильтры, сортировки и т. Д., Не возвращая IQueryable: http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

3 голосов
/ 01 декабря 2010

Хороший универсальный репозиторий для структуры сущностей (активный): http://www.codeproject.com/KB/database/ImplRepositoryPatternEF.aspx

в настоящее время я использую этот как Application Framework (идеальный репозиторий в комплекте) http://efmvc.codeplex.com/

Просьба крикнуть;)

2 голосов
/ 04 мая 2009

Я не уверен, что это правильно, но я использую L2E, переводя сгенерированные объекты в объекты домена с помощью AutoMapper стороннего инструмента.

...