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

StackOverflow https://stackoverflow.com/questions/4821242

  •  26-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

С помощью простого репозитория вы сами создаете Poco.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 выполнить запрос на обновление во время сохранения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top