Особенности создания объекта данных на основе существующего
Прототипизация
- создание объекта данных на основе другого.
Методы для прототипизации DataObject
Для прототипизации DataObject существует метод Prototyping
.
/// <summary>
/// Прототипизировать
/// </summary>
/// <param name="withDetails">с детейлами или без</param>
public virtual void Prototyping(bool withDetails)
Также существует перегрузка данного метода без параметров (в этом случае будет просто произведён вызов метода Prototyping(true)
).
Прототипизация DataObject
При прототипизации происходят следующие действия:
- сбрасывается значение первичного ключа объекта (генерируется новое);
- статус объекта изменяется на
ObjectStatus.Created
; - состояние загрузки объекта устанавливается в
LoadingState.NotLoaded
; - вызывается метод InitDataCopy.
Если переданный параметр withDetails
имеет значение true
, то прототипизация будет выполнена и для всех детейлов.
Примечания по протитопизации
- Получить первичный ключ объекта, который он имел до прототипизации, можно через свойство
PrototypeKey
. - Очистка свойства
PrototypeKey
происходит при вызове методаClearPrototyping
(если вызов был произведён без параметров или значение параметра былоtrue
, то соответствующее свойство будет очищено и у детейлов). - Вызов метода
ClearPrototyping(true)
также происходит при сохранении объекта через SQLDataService. - Узнать, был ли объект прототипизирован можно через свойство
Prototyped
. - При выполнении дочитки объекта сервис данных будет осуществлять вычитку свойств прототипизированного объекта, используя в качестве первичного ключа
PrototypeKey
(но при выполнении UpdateObject в БД будет создан новый объект).