Изменение параметра в БД, используя его путь относительно корневой схемы
Добрый день! Столкнулся со следующей проблемой:
У меня есть путь относительно корневой схемы к параметру, который нужно изменить. Вида:
mainEntity.entityA.(...).entityN.lookupName
Мне нужно изменить значение справочника в последней присоединенной схеме.
Пробовал делать следующим образом:
var esqMainEntity = new EntitySchemaQuery(userConnection.EntitySchemaManager, "mainEntity");
esqMessage.AddColumn(actionEntityPath);
var mainEntity = esqMessage.GetEntity(userConnection, mainId);
mainEntity.SetColumnValue("mainEntity_entityA_(...)_entityN_lookupNameId", newValue);
mainEntity.Save();
В данном случае SetColumnValue проходит, но возникает ошибка на методе Save(). Видимо, таким образом нельзя изменить значение в присоединенной таблице, а не в основной.
Пробовал обновить через update:
var update = new Update(userConnection, "mainEntity")
.Set("mainEntity.entityA.(...).entityN.lookupNameId", Column.Const(newValue))
.Where("Id").IsEqual(Column.Const(mainId));
update.Execute();
Тоже выдает ошибку (с конструкцией "mainEntity_entityA_(...)_entityN_lookupNameId" та же история).
Подскажите, пожалуйста, как мне быть. Ещё думал получить Id entityN и обновить уже этот объект, но название самого объекта может отличаться от его названия относительно корневой схемы, и это не дает мне выполнить update этого объекта.
Нравится
Если у вас есть путь к колонке, соответственно вы знаете в какой именно объект надо зафиксировать изменения. Поэтому не выдумывая никакие пути пишем
var manager = UserConnection.EntitySchemaManager.GetInstanceByName("Department"); //своё название конечного объекта вместо Department var entity = manager.CreateEntity(UserConnection); entity.FetchFromDB(depId); //id элемента/записи в бд entity.SetColumnValue("Name", "Новый отдел"); //1 параметром идёт именно колонка из объекта. никаких путей. для лукапных колонок добавляется Id (например CreatedById) entity.Save(false);
Также не рекомендую делать entity.Save через esq. А если и делать, то предварительно выбрать все колонки (esq.AddAllSchemaColumns). И опять же, без путей.
Update - это простой конструктор sql комманд и пути он не понимает от слова "совсем". Чтобы составить сложную конструкцию для select надо напихать кучу leftJoin.
Варфоломеев Данила,
Проблема в том, что объект, который называется Department, в пути может называться как угодно:
WwfTask.WwfClient.WwfDepartment
В этом случае колонка WwfDepartment является ссылкой на объект Department. То есть в таком случае мне необходимо узнать имя конечной схемы, которую нужно обновить. А я не знаю как это сделать, к своему глубокому сожалению.