protected virtual void OnChangeConflict(ChangeConflictCollection changeConflicts) { foreach (ObjectChangeConflict changeConflict in changeConflicts) { changeConflict.Resolve(RefreshMode.KeepChanges); } }
protected override bool ResolveConflicts(ChangeConflictCollection conflicts) { foreach (ObjectChangeConflict conflict in conflicts) { Type entityType = conflict.Object.GetType(); if (entityType == typeof(Product)) { if (!this.ResolveProductConflict(conflict)) { return(false); } } } return(true); }
/// <summary> /// After dataContext.SubmitChanges() fails you can check details on which elements failed. /// </summary> /// <param name="ccc">Conflict collection (dataContext.ChangeConflicts).</param> /// <returns>String representation of conflicts.</returns> public static string ConflictsToString(ChangeConflictCollection ccc) { var sb = new StringBuilder(); for (var oi = 0; oi < ccc.Count; oi++) { var occ = ccc[oi]; sb.AppendFormat("---{0}\r\n", occ.Object.GetType().FullName); if (occ.Object != null) { sb.AppendFormat(": {0}", occ.Object.ToString()); } for (var mi = 0; mi < occ.MemberConflicts.Count; mi++) { var mcc = occ.MemberConflicts[mi]; var problem = mcc.OriginalValue != mcc.DatabaseValue ? " [db != or]" : ""; sb.AppendFormat("{0}{1}\r\n", mcc.Member.Name, problem); sb.AppendFormat(" Original = {0}\r\n", FormatValue(mcc.OriginalValue)); sb.AppendFormat(" Current = {0}\r\n", FormatValue(mcc.CurrentValue)); sb.AppendFormat(" Database = {0}\r\n", FormatValue(mcc.DatabaseValue)); } } return(sb.ToString()); }
/// <summary> /// This method will be called if Submit fails due to optimistic concurrency conflicts. /// Override this method to handle optimistic concurrency conflicts. The base implementation /// returns false. /// </summary> /// <param name="conflicts">The collection of conflicts to resolve.</param> /// <returns>True if all conflicts were resolved, false otherwise. If true is /// returned a resubmit will be attempted.</returns> protected virtual bool ResolveConflicts(ChangeConflictCollection conflicts) { return(false); }
private string CreateXmlFile(ChangeConflictCollection changeConflictCollection) { var errorFileName = string.Concat(ErrorFileName, "-", Guid.NewGuid(), ".xml"); var filePath = Path.Combine(_erroFileLocation, errorFileName); XmlDocument doc = new XmlDocument(); XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null); doc.AppendChild(dec);// Create the root element // doc.Load(filePath); XmlElement root = doc.CreateElement("Objects"); foreach (ObjectChangeConflict conflict in changeConflictCollection) { XmlNode childElement = doc.CreateElement("Object"); XmlAttribute objectType = doc.CreateAttribute("Type"); objectType.Value = conflict.Object.GetType().Name; childElement.Attributes.Append(objectType); XmlElement conflictMembers = doc.CreateElement("ConflictedMembers"); foreach (var member in conflict.MemberConflicts) { XmlNode conflictedMember = doc.CreateElement("ConflictedMember"); XmlAttribute memberName = doc.CreateAttribute("Name"); memberName.Value = member.Member.Name; conflictedMember.Attributes.Append(memberName); XmlAttribute currentValue = doc.CreateAttribute("CurrentValue"); currentValue.Value = member.CurrentValue == null ? "Null" : member.CurrentValue.ToString(); conflictedMember.Attributes.Append(currentValue); XmlAttribute originalValue = doc.CreateAttribute("OriginalValue"); originalValue.Value = member.OriginalValue == null ? "Null" : member.OriginalValue.ToString(); conflictedMember.Attributes.Append(originalValue); XmlAttribute databaseValue = doc.CreateAttribute("DatabaseValue"); databaseValue.Value = member.DatabaseValue == null ? "Null" : member.DatabaseValue.ToString(); conflictedMember.Attributes.Append(databaseValue); conflictMembers.AppendChild(conflictedMember); } childElement.AppendChild(conflictMembers); PropertyInfo[] properties = conflict.Object.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).OrderBy(pi => pi.Name, StringComparer.InvariantCultureIgnoreCase).ToArray(); foreach (var propertyInfo in properties) { XmlNode propertyElement = doc.CreateElement("Property"); XmlAttribute propertyName = doc.CreateAttribute("Name"); propertyName.Value = propertyInfo.Name; propertyElement.Attributes.Append(propertyName); XmlAttribute propertyValue = doc.CreateAttribute("Value"); var value = propertyInfo.GetValue(conflict.Object, null); propertyValue.Value = value == null ? string.Empty: value.ToString(); propertyElement.Attributes.Append(propertyValue); childElement.AppendChild(propertyElement); } root.AppendChild(childElement); doc.AppendChild(root); doc.Save(filePath); //sw.WriteLine(conflict.Object.ToString()); //conflict.Resolve(RefreshMode.KeepChanges, true); //sw.WriteLine(conflict.Object.ToString()); } return(filePath); }