public object LoadObject(string type, object identity, string domainKey) { // if (useCompression && this.compressor != null) // { // type = this.compressor.Decompress(type); // identity = this.compressor.Decompress((string) identity); // domainKey = this.compressor.Decompress(domainKey); // } IContext ctx = contextFactory.GetContext(domainKey); IClassMap classMap = ctx.DomainMap.MustGetClassMap(type); Type realType = ctx.AssemblyManager.MustGetTypeFromClassMap(classMap); object obj = ctx.GetObjectById(identity, realType); IMarshalingTransformer transformer = new MarshalingTransformer(ctx); MarshalObject mo = transformer.FromObject(obj); object serialized = formater.Serialize(mo); ctx.Dispose(); if (useCompression && this.compressor != null) { return(this.compressor.Compress((string)serialized)); } else { return(serialized); } }
public virtual MarshalUnitOfWork GetUnitOfWork() { MarshalUnitOfWork muow = new MarshalUnitOfWork(); IMarshalingTransformer transformer = new MarshalingTransformer(Context); MarshalObject mo; foreach (object obj in listInsert) { mo = transformer.FromObject(obj, true); muow.InsertObjects.Add(mo); } foreach (object obj in listUpdate) { mo = transformer.FromObject(obj); muow.UpdateObjects.Add(mo); } foreach (object obj in listRemove) { mo = transformer.FromObject(obj); muow.RemoveObjects.Add(mo); } return(muow); }
public object LoadProperty(object obj, string propertyName, string domainKey) { if (useCompression && this.compressor != null) { obj = this.compressor.Decompress((string)obj); //propertyName = this.compressor.Decompress(propertyName); //domainKey = this.compressor.Decompress(domainKey); } IContext ctx = contextFactory.GetContext(domainKey); IObjectManager om = ctx.ObjectManager; IMarshalingTransformer transformer = new MarshalingTransformer(ctx); MarshalReference mr = (MarshalReference)formater.Deserialize(obj, typeof(MarshalReference)); string identity = transformer.GetIdentity(mr, mr.Value); IClassMap classMap = ctx.DomainMap.MustGetClassMap(mr.Type); IPropertyMap propertyMap = classMap.MustGetPropertyMap(propertyName); Type realType = ctx.AssemblyManager.MustGetTypeFromClassMap(classMap); //object realObj = ctx.GetObjectById(identity, realType); object realObj = ctx.GetObjectById(identity, realType, true); ctx.LoadProperty(realObj, propertyName); object serialized = null; if (propertyMap.IsCollection) { if (propertyMap.ReferenceType == ReferenceType.None) { // IList list = (IList) om.GetPropertyValue(realObj, propertyName); // MarshalList ml = transformer.FromList(list) ; // serialized = formater.Serialize(ml); } else { //TODO: fix transformer.FromReferenceList //Even better: Add MarshalProperty.Object, OriginalObject, List, OriginalList, ReferenceList and OriginalReferenceList! IList list = (IList)om.GetPropertyValue(realObj, propertyName); MarshalObjectList mol = transformer.FromObjectList(list); serialized = formater.Serialize(mol); } } else { if (propertyMap.ReferenceType == ReferenceType.None) { MarshalProperty mp = transformer.FromProperty(obj, propertyMap); serialized = formater.Serialize(mp); } else { object value = om.GetPropertyValue(realObj, propertyName); if (value != null) { ObjectStatus objectStatus = ctx.GetObjectStatus(value); if (objectStatus == ObjectStatus.NotLoaded) { ctx.PersistenceEngine.LoadObject(ref value); } if (value != null) { MarshalObject mo = transformer.FromObject(value); serialized = formater.Serialize(mo); } } } } if (serialized == null) { serialized = ""; } ctx.Dispose(); if (useCompression && this.compressor != null) { return(this.compressor.Compress((string)serialized)); } else { return(serialized); } }