Начало работы с Subsonic Repository для 3-уровневого приложения - PullRequest
0 голосов
/ 27 января 2011

Я смог сразу запустить активную запись. Инструкции по началу работы были великолепны, и я быстро создал веб-сервис, который позволял бы мне создавать и читать виджеты в моей существующей базе данных. Это было потрясающе. Когда дело дошло до обновления, все пошло не так. Я бы отредактировал объект на клиенте и отправил его обратно в службу, но когда служба сохранила его, он просто создал бы новый. Я рассуждал, что это означало, что мне нужно будет повторно запросить базу данных и присвоить значения, отправленные в сервис от клиента, но мой начальник сказал, что это будет хакерским и что шаблон репозитория будет лучше, потому что может использовать pocos. К сожалению, это степень руководства, которое я получил. Итак, вот мои вопросы.

  1. Являются ли шаблоны t4 хорошими только для активной записи, или они будут строить ваш простой репозиторий для вас тоже. Например, есть ли что-то, что будет генерировать мои pocos тоже или они все «свернуть»?

  2. Кто-нибудь видел рабочий пример дозвукового 3-х уровневого решение? Я читал о них, но есть ли плавающие образцы вокруг?

За активными сэмплами / скринкастами записи было очень легко следить, потому что они начинались в том же месте, с которого я начинал. Простые репозитории, казалось, больше фокусировались на миграциях и других расширенных функциях, и, поскольку этот материал для меня нов, я не знаю достаточно, чтобы соединить точки.

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

Заранее спасибо

1 Ответ

0 голосов
/ 29 января 2011

Если вы хотите использовать шаблон репозитория, вы можете использовать linq шаблоны или использовать простой репозиторий, который не требует никаких шаблонов t4.

В простом репозитории вы создаете pocosсам.Subsonic может создать или обновить схему базы данных для вас, если вы выберете:

var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations);

, но если вы спросите меня, я выберу SimpleRepositoryOptions.None и обновлю базу данных самостоятельно.

В любом случае, вашПервоначальная проблема с шаблонами ActiveRecord может быть решена довольно легко.Я предлагаю, чтобы ваш объект ActiveRecord был сериализован на стороне клиента и десериализован на сервере.

Конструктор по умолчанию для объекта ActiveRecord вызывает функцию Init, которая выглядит следующим образом:

    void Init(){
        TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase);
        _dirtyColumns=new List<IColumn>();
        if(TestMode){
            <#=tbl.ClassName#>.SetTestRepo();
            _repo=_testRepo;
        }else{
            _repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db);
        }
        tbl=_repo.GetTable();
        SetIsNew(true);
        OnCreated();       

    }

Как вывидно, внутренний репозиторий создан и SetIsNew(true) выполнен.Единственное, что вам нужно сделать, это вызвать myitem.SetIsNew(false) после того, как объект будет заполнен десериализованными значениями.Я полагаю, этого достаточно, чтобы Subsonic сделал запрос на обновление во время сохранения.

...