Example #1
0
        /// <summary>
        /// 取得組態資料,如果指定的名稱存在則回傳資料,不存在則自動建立新的組態。
        /// </summary>
        /// <param name="configName"></param>
        /// <returns></returns>
        public ConfigData this[string configNamespace]
        {
            get
            {
                string ns = NamespacePreprocess(configNamespace);

                ConfigurationRecord record = Cache[ns];

                if (record == null)
                {
                    if (Readonly)
                    {
                        throw new ArgumentException("指定的組態不存在。", "configNamespace");
                    }
                    else
                    {
                        return(new ConfigData(this, new ConfigurationRecord(ns)));
                    }
                }
                else
                {
                    return(new ConfigData(this, record));
                }
            }
        }
        private void Manager_ConfigurationUpdated(object sender, ItemUpdatedEventArgs e)
        {
            string name = Namespace;

            if (e.PrimaryKeys.Contains(name))
            {
                if (Sync) //同步時的處理方式。
                {
                    if (Manager.Cache[name] != null)
                    {
                        ConfigurationRecord newRecord = Manager.Cache[name];

                        if (newRecord.BaseData == null && newRecord.PreviousData == null)
                        {
                            Record = newRecord;
                        }
                        else
                        {
                            if (Record.BaseData != null)
                            {
                                //神秘的大絕招... = =''
                                foreach (string each in new List <string>(Record.BaseData.Keys)) //將自身的資料同步到別人的資料中…
                                {
                                    newRecord.BaseData[each] = Record.BaseData[each];
                                }
                            }
                            newRecord.PreviousData = Record.PreviousData;

                            Record = newRecord; //一定是更新模式。
                        }
                    }
                    else //代表別人把這個組態從資料庫刪掉了。
                    {
                        Record.EditAction = 1;//新增模式。
                    }
                }
                else //非同步時的處理方式。
                {
                    //處理當原本是新增的組態,因為另一個相同 Namespace 的組態先儲存了,這裡就改成更新。
                    if (Manager.Cache[name] != null)
                    {
                        if (Record.EditAction == 1)
                        {
                            Record.EditAction = 2;
                        }
                    }
                }
            }

            Manager.ConfigurationUpdated -= new EventHandler <ItemUpdatedEventArgs>(Manager_ConfigurationUpdated);
        }
        internal ConfigData(ConfigurationManager manager, ConfigurationRecord record)
        {
            Sync    = true;
            Manager = manager;

            if (record == null)
            {
                throw new ArgumentException("組態記錄不可以是 Null。");
            }
            else
            {
                Record = record;
            }
        }
Example #4
0
        /// <summary>
        /// 複製一份資料。
        /// </summary>
        /// <returns></returns>
        internal ConfigurationRecord Clone()
        {
            ConfigurationRecord record = new ConfigurationRecord(Namespace);

            record.EditAction = EditAction;

            if (BaseData != null)
            {
                record.BaseData = BaseData.Clone();
            }

            if (PreviousData != null)
            {
                record.PreviousData = PreviousData.CloneNode(true) as XmlElement;
            }

            return(record);
        }
        /// <summary>
        /// 複製一份資料。
        /// </summary>
        /// <returns></returns>
        internal ConfigurationRecord Clone()
        {
            ConfigurationRecord record = new ConfigurationRecord(Namespace);
            record.EditAction = EditAction;

            if (BaseData != null)
                record.BaseData = BaseData.Clone();

            if (PreviousData != null)
                record.PreviousData = PreviousData.CloneNode(true) as XmlElement;

            return record;
        }
 internal ConfigData(ConfigurationManager manager, ConfigurationRecord record, bool sync)
     : this(manager, record)
 {
     Sync = sync;
 }