Особенности использования копирования объектов данных

Сервис данных выполняет построение запросов на изменение строк в БД на основе информации об изменённых свойствах объекта. Для получения этой информации в самом объекте хранится отдельная полная копия объекта (при этом для выявления изменений требуется лишь сравнить текущие значения полей объекта данных и соответствующих значений в его копии).

Копия объекта данных доступна через метод dataobject.GetDataCopy().

Копия данных заполняется из значений полей объекта в нескольких случаях:

  • При вычитке объекта из БД (если не было указано, что инициализировать копию данных не надо).
  • При вызове метода dataobject.InitDataCopy() программистом.

Оптимизация работы

Операция создания копии данных - довольно дорогостоящая операция в плане производительности, поэтому рекомендуется при вычитке объектов, которые точно не будут обновляться в БД, отключать инициализацию копии данных в свойствах LoadingCustomizationStruct:

LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Шапка), "ШапкаE");
lcs.InitDataCopy = false;

Также в целях оптимизации не происходит инициализация мастеровых полей. Для мастеров инициализируются только первичные ключи. Если мастеровой объект был вычитан с достаточным количеством полей и его планируется обновлять в БД, то сразу после зачитки для него необходимо вызвать метод InitDataCopy().

Копия данных созданного объекта

Если объект имеет статус Created, то у него отсутствует копия данных после инициализации копии данных (InitDataCopy), поскольку копия данных объекту, у которого статус Created не нужна (при обновлении данный объект весь пойдёт в базу, и InitDataCopy пропускает такие объекты).