/// <summary> /// Сохраняет chunked-данные всех объектов из датаграммы /// </summary> /// <param name="transactionID">Идентификатор транзакции</param> /// <param name="datagram">датаграмма</param> /// <param name="con">соединение</param> protected static void saveChunkedData(Guid transactionID, XDatagram datagram, XStorageConnection con) { bool bChunkedDataFound = false; foreach (XStorageObjectToSave xobj in datagram.ObjectsToInsert) { bChunkedDataFound = saveObjectChunkedData(xobj, con); } foreach (XStorageObjectToSave xobj in datagram.ObjectsToUpdate) { bChunkedDataFound = bChunkedDataFound || saveObjectChunkedData(xobj, con); } // Если в процессе какие-либо "кусочные" данные были перегружены // в положенные таблицы - удаляем такие "куски": if (bChunkedDataFound) { XChunkStorageGateway.RemoveTransactionData(transactionID, con); } }
/// <summary> /// Сохраняет chunked-данные заданного объекта /// </summary> /// <param name="xobj">объект</param> /// <param name="con">соединение с БД</param> /// <returns>true - объект содержал chunked данные, иначе false</returns> protected static bool saveObjectChunkedData(XStorageObjectToSave xobj, XStorageConnection con) { string sPropName; // наименование свойтсва Guid ownerID; // идентификатор цепочки кусочных данных свойства bool bChunkedDataFound = false; // найдем свойства, чьи данные были загруженны по частам foreach (DictionaryEntry entry in xobj.PropertiesWithChunkedData) { sPropName = (string)entry.Key; ownerID = (Guid)entry.Value; bChunkedDataFound = true; XChunkStorageGateway.MergePropertyChunkedData( ownerID, xobj.ObjectType, sPropName, xobj.ObjectID, con); } return(bChunkedDataFound); }