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