コード例 #1
0
        public XmlNode SerializeToXmlNode(XmlDocument xmlDoc, MarshalUnitOfWork marshalUnitOfWork)
        {
            XmlNode xml = xmlDoc.CreateElement("unit-of-work");
            XmlNode xmlSub;

            xmlSub = xmlDoc.CreateElement("insert");
            xml.AppendChild(xmlSub);
            foreach (MarshalObject mo in marshalUnitOfWork.InsertObjects)
            {
                xmlSub.AppendChild(SerializeToXmlNode(xmlDoc, mo));
            }

            xmlSub = xmlDoc.CreateElement("update");
            xml.AppendChild(xmlSub);
            foreach (MarshalObject mo in marshalUnitOfWork.UpdateObjects)
            {
                xmlSub.AppendChild(SerializeToXmlNode(xmlDoc, mo));
            }

            xmlSub = xmlDoc.CreateElement("remove");
            xml.AppendChild(xmlSub);
            foreach (MarshalObject mo in marshalUnitOfWork.RemoveObjects)
            {
                xmlSub.AppendChild(SerializeToXmlNode(xmlDoc, mo));
            }

            return(xml);
        }
コード例 #2
0
        private MarshalUnitOfWork ToMarshalUnitOfWork(XmlNode xmlUnitOfWork)
        {
            MarshalUnitOfWork muow = new MarshalUnitOfWork();
            XmlNode           xmlListNode;
            XmlNodeList       xmlNodeList;

            xmlListNode = xmlUnitOfWork.SelectSingleNode("insert");
            if (xmlListNode != null)
            {
                xmlNodeList = xmlListNode.SelectNodes("object");
                foreach (XmlNode xmlObj in xmlNodeList)
                {
                    muow.InsertObjects.Add(ToMarshalObject(xmlObj));
                }
            }
            xmlListNode = xmlUnitOfWork.SelectSingleNode("update");
            if (xmlListNode != null)
            {
                xmlNodeList = xmlListNode.SelectNodes("object");
                foreach (XmlNode xmlObj in xmlNodeList)
                {
                    muow.UpdateObjects.Add(ToMarshalObject(xmlObj));
                }
            }
            xmlListNode = xmlUnitOfWork.SelectSingleNode("remove");
            if (xmlListNode != null)
            {
                xmlNodeList = xmlListNode.SelectNodes("object");
                foreach (XmlNode xmlObj in xmlNodeList)
                {
                    muow.RemoveObjects.Add(ToMarshalObject(xmlObj));
                }
            }
            return(muow);
        }
コード例 #3
0
        public override void Commit(bool recursive)
        {
            if (this.url.Length < 1)
            {
                throw new NPersistException("You must specify an url to your NPersist Web Service in your WebServiceRemotingEngine!");
            }
            MarshalUnitOfWork muow   = GetUnitOfWork();
            RemotingService   rs     = new RemotingService(this.Context, url);
            string            xmlUoW = (string)Formatter.Serialize(muow);

            if (useCompression && this.compressor != null)
            {
                xmlUoW = this.compressor.Compress(xmlUoW);
            }

            bool doUseCompression = this.useCompression;

            if (this.compressor == null)
            {
                doUseCompression = false;
            }

            string result = rs.CommitUnitOfWork(xmlUoW, this.domainKey, doUseCompression);

            if (useCompression && this.compressor != null)
            {
                result = this.compressor.Decompress(result);
            }

            MarshalObjectList mol = (MarshalObjectList)Formatter.Deserialize(result, typeof(MarshalObjectList));

            UpdateSourceAssigned(mol);
            ClearUnitOfWork();
        }
コード例 #4
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);
        }
コード例 #5
0
        public object CommitUnitOfWork(object obj, string domainKey)
        {
            if (useCompression && this.compressor != null)
            {
                obj = this.compressor.Decompress((string)obj);
                //domainKey = this.compressor.Decompress(domainKey);
            }

            IContext ctx = contextFactory.GetContext(domainKey);
            MarshalingTransformer transformer = new MarshalingTransformer(ctx);
            //Deserialize the uow
            MarshalUnitOfWork muow = (MarshalUnitOfWork)formater.Deserialize(obj, typeof(MarshalUnitOfWork));

            string            identity;
            string            serialized = "";
            IClassMap         classMap;
            Type              realType;
            object            ro;
            MarshalObjectList mol = new MarshalObjectList();
            Hashtable         insertedRealObjects = new Hashtable();

            ITransaction tx = null;

            try
            {
                tx = ctx.BeginTransaction();

                foreach (MarshalObject mo in muow.RemoveObjects)
                {
                    identity = transformer.GetIdentity(mo);
                    classMap = ctx.DomainMap.MustGetClassMap(mo.Type);
                    realType = ctx.AssemblyManager.MustGetTypeFromClassMap(classMap);
                    ro       = ctx.GetObjectById(identity, realType);
                    transformer.ToObject(mo, ref ro, 0, RefreshBehaviorType.OverwriteLoaded);
                    ctx.UnitOfWork.RegisterDeleted(ro);
                }

                foreach (MarshalObject mo in muow.UpdateObjects)
                {
                    identity = transformer.GetIdentity(mo);
                    classMap = ctx.DomainMap.MustGetClassMap(mo.Type);
                    realType = ctx.AssemblyManager.MustGetTypeFromClassMap(classMap);
                    ro       = ctx.GetObjectById(identity, realType);
                    transformer.ToObject(mo, ref ro, 0, RefreshBehaviorType.OverwriteLoaded);
                    ctx.UnitOfWork.RegisterDirty(ro);
                }

                foreach (MarshalObject mo in muow.InsertObjects)
                {
                    classMap = ctx.DomainMap.MustGetClassMap(mo.Type);
                    realType = ctx.AssemblyManager.MustGetTypeFromClassMap(classMap);
                    if (mo.TempId.Length > 0)
                    {
                        ro = ctx.CreateObject(realType);
                    }
                    else
                    {
                        identity = transformer.GetIdentity(mo);
                        ro       = ctx.CreateObject(identity, realType);
                    }
                    insertedRealObjects[mo] = ro;
                    transformer.ToObject(mo, ref ro, 0, RefreshBehaviorType.OverwriteDirty);
                }

                //Commit transaction
                tx.Commit();
            }
            catch (Exception ex)
            {
                if (tx != null)
                {
                    tx.Rollback();
                }
                ctx.Dispose();
                throw ex;
            }

            foreach (MarshalObject mo in muow.InsertObjects)
            {
                classMap = ctx.DomainMap.MustGetClassMap(mo.Type);
                if (classMap.HasAssignedBySource())
                {
                    foreach (IPropertyMap propertyMap in classMap.GetAllPropertyMaps())
                    {
                        if (propertyMap.GetIsAssignedBySource())
                        {
                            MarshalProperty mp = mo.GetProperty(propertyMap.Name);
                            if (mp == null)
                            {
                                mp      = new MarshalProperty();
                                mp.Name = propertyMap.Name;
                                mo.Properties.Add(mp);
                            }
                            ro       = insertedRealObjects[mo];
                            mp.Value = transformer.FromPropertyValue(ro, ctx.ObjectManager.GetPropertyValue(ro, propertyMap.Name), propertyMap);
                            mol.Objects.Add(mo);
                        }
                    }
                }
            }

            ctx.Dispose();

            serialized = (string)formater.Serialize(mol);

            if (useCompression && this.compressor != null)
            {
                return(this.compressor.Compress(serialized));
            }
            else
            {
                return(serialized);
            }
        }