Используя шаблон репозитория с Платформой Объекта (mvc витрина)

Первое исправление в EDIT1: действительно, pcp_attach_node помог исправить ошибку вывода show pool_nodes, но еще больше усложнил проблему, как и другие команды

pcp_watchdog_info -h 193.185.83.119 -p 9898 -U postgres [113 ] blockquote>

начал застрять. Позже я обнаружил, что

pcp_attach_node -n 1

blockquote>

вообще не требовалось для добавления режима ожидания или исправления вывода show pool_nodes; на мастере ЕСЛИ оригинальный pcp_recovery_node завершается правильно.

Ну, коренная причина оригинальной проблемы, и сторожевой таймер возник из-за этого позже, было то, что сценарий pgpool_remote_start не завершался правильно даже после запуска режима ожидания. Я мог видеть это в

ps -ef | grep pgpool

blockquote>

на мастере.

Я связался с системой pgpool_bug_tracking по адресу здесь , и они помогли мне исправить ее. Это была неправильная команда запуска postgres в pgpool_remote_start, которая вызывала проблемы, и, следовательно, pcp_recover_node не завершалась, и никакая другая позже.

Правильная команда в pgpool_remote_start должна выглядеть примерно так (и я ее использовал):

ssh -T postgres@$REMOTE_HOST /usr/pgsql-10/bin/pg_ctl -w start -D /data/test/data 2>/dev/null 1>/dev/null 

, когда я использовал

ssh -T postgres @ $ REMOTE_HOST / usr / pgsql-10 / bin / pg_ctl start -D / data / test / data

blockquote>

Я пропустил флаг -w. Также не было перенаправления stdout и stderr на / dev / null и отсутствовала передача сигнала EOF на него.

Мне все еще непонятно, но полезно кому-то, сталкивающемуся с подобной проблемой: сначала запустите pgpool.service в режиме ожидания или оставьте его запущенным, прежде чем вводить команду pcp на master.

13
задан philu 25 October 2013 в 08:18
поделиться

4 ответа

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

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

Для использования большего, чем и меньше, чем символы в тексте абзаца в Переполнении стека, необходимо выйти из них, как Вы были бы в HTML, т.е.:

&lt;

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

9
ответ дан 1 December 2019 в 20:57
поделиться

Возможно, если Вы видите Учебное руководство менеджера по Контакту в сайте http://www.asp.net/learn/mvc/#MVC_SampleApp, они используют Шаблон Репозитория и Платформу Объекта.

6
ответ дан 1 December 2019 в 20:57
поделиться

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

2
ответ дан 1 December 2019 в 20:57
поделиться

Я начал, как и вы, несколько недель назад, вы увидите, что работать с 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 только внутри репозитория и возвращаю только список запрошенных сущностей. Таким образом, я могу контролировать, что запрос к БД всегда выполняется внутри Репо.

5
ответ дан 1 December 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: