/// <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; } }
/// <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; }