Начало работы с Subsonic Repository для трехуровневого приложения

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

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

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

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

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

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


person Lloyd    schedule 27.01.2011    source источник


Ответы (1)


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

В простом репозитории вы сами создаете поко. 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 о необходимости выполнения запроса на обновление во время сохранения.

person Jürgen Steinblock    schedule 29.01.2011