public override T GetLargeObject <T>(string key) { if (base.TryGetLargeObject <T>(key, out T obj)) { return(obj); } else { obj = new MapZipSerializer().DeserializeLargeObject <T>(FileName, key); base.SetLargeObject(key, obj); return(obj); } }
private List <string> newLobs = new List <string>(); //not saved yet /// <summary> /// /// </summary> /// <param name="key"></param> /// <returns>null if not found</returns> public byte[] GetByteArray(string key) { byte[] obj; if (lobCache.TryGetValue(key, out obj)) { return(lobCache[key] as byte[]); } else { obj = new MapZipSerializer().DeserializeLargeObject(FileName, key); lobCache[key] = obj; } return(obj); }
/// <summary> /// Large Objects are loaded on demand by PersistentTree, by default. This method forces to preload all of them. /// This is useful when making a copy of the map (like in Save As) /// </summary> public void LoadAllLargeObjects() { var ser = new MapZipSerializer(); List <string> keys = ser.DeserializeAllLargeObjectKeys(FileName); foreach (var key in keys) { if (!lobStore.ContainsKey(key)) { ILargeObject largeObject = LargeObjectHelper.CreateFromKey(key); if (ser.DeserializeLargeObject(FileName, key, largeObject)) { base.SetLargeObject(key, largeObject); } } } }
public override bool TryGetLargeObject <T>(string key, out T largeObject) { if (base.TryGetLargeObject <T>(key, out largeObject)) { return(true); } else { largeObject = new MapZipSerializer().DeserializeLargeObject <T>(FileName, key); if (largeObject != null) { base.SetLargeObject(key, largeObject); return(true); } else { return(false); } } }
/// <summary> /// Save Changes /// </summary> public void Save(bool overwrite = false) { Debug.Assert(FileName != null, "Persistent Tree: File name is null."); var serializer = new MapZipSerializer(); try { serializer.SerializeMap(this, FileName, overwrite); } catch (InvalidDataException) //in case of converting from old xml version, save without overwrite=true will not work { serializer.SerializeMap(this, FileName, true); } newLobs.Clear(); deletedLobs.Clear(); IsDirty = false; manager._InvokeTreeSaved(this); }
/// <summary> /// Save Changes /// </summary> public void Save(bool overwrite = false) { Debug.Assert(FileName != null, "Persistent Tree: File name is null."); //if overwrite then save all largeObjects, otherwise only new ones IEnumerable <KeyValuePair <string, byte[]> > largeObjectsToSave = overwrite ? lobCache : lobCache.Where(k => newLobs.Contains(k.Key)); var serializer = new MapZipSerializer(); try { serializer.SerializeMap(Tree, largeObjectsToSave, FileName, overwrite); } catch (InvalidDataException) //in case of converting from old xml version, save without overwrite=true will not work { serializer.SerializeMap(Tree, largeObjectsToSave, FileName, true); } newLobs.Clear(); IsDirty = false; manager._InvokeTreeSaved(this); }