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

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

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

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

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

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

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

1 ответ

Решение

Если вы хотите использовать шаблон репозитория, вы можете использовать шаблоны 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 сделал запрос на обновление во время сохранения.

Другие вопросы по тегам