Example #1
0
 protected virtual void OnChangeConflict(ChangeConflictCollection changeConflicts)
 {
     foreach (ObjectChangeConflict changeConflict in changeConflicts)
     {
         changeConflict.Resolve(RefreshMode.KeepChanges);
     }
 }
Example #2
0
        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);
        }
Example #3
0
        /// <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);
 }
Example #5
0
        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);
        }