Сервис данных выполняет построение запросов на изменение строк в БД на основе информации об изменённых свойствах объекта. Для получения этой информации в самом объекте хранится отдельная полная копия объекта (при этом для выявления изменений требуется лишь сравнить текущие значения полей объекта данных и соответствующих значений в его копии).
Копия объекта данных доступна через метод dataobject.GetDataCopy()
.
Копия данных заполняется из значений полей объекта в нескольких случаях:
- При вычитке объекта из БД (если не было указано, что инициализировать копию данных не надо).
- При вызове метода
dataobject.InitDataCopy()
программистом.
Оптимизация работы
Операция создания копии данных - довольно дорогостоящая операция в плане производительности, поэтому рекомендуется при вычитке объектов, которые точно не будут обновляться в БД, отключать инициализацию копии данных в свойствах LoadingCustomizationStruct:
LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(typeof(Шапка), "ШапкаE");
lcs.InitDataCopy = false;
Также в целях оптимизации не происходит инициализация мастеровых полей. Для мастеров инициализируются только первичные ключи. Если мастеровой объект был вычитан с достаточным количеством полей и его планируется обновлять в БД, то сразу после зачитки для него необходимо вызвать метод InitDataCopy()
.
Копия данных созданного объекта
Если объект имеет статус Created
, то у него отсутствует копия данных после инициализации копии данных (InitDataCopy
), поскольку копия данных объекту, у которого статус Created
не нужна (при обновлении данный объект весь пойдёт в базу, и InitDataCopy пропускает такие объекты).