コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }