ArcGIS Pro 3.3 API Reference Guide
ArcGIS.Core.Data Namespace / ConflictDetectionType Enumeration
Example Example Version

ConflictDetectionType Enumeration
Specifies how conflicts are defined.
Syntax
Members
MemberDescription
ByColumn Conflicts are only detected if the same attribute is updated in the source and target versions.
ByRow Conflicts are detected if the same row is edited in the source and target versions.
Example
Get and Set Versioning Options
var vOptions = ApplicationOptions.VersioningOptions;

vOptions.DefineConflicts = (vOptions.DefineConflicts == ConflictDetectionType.ByRow) ? 
  ConflictDetectionType.ByColumn : ConflictDetectionType.ByRow;
vOptions.ConflictResolution = (
  vOptions.ConflictResolution == ConflictResolutionType.FavorEditVersion) ? 
    ConflictResolutionType.FavorTargetVersion : ConflictResolutionType.FavorEditVersion;
vOptions.ShowConflictsDialog = !vOptions.ShowConflictsDialog;
vOptions.ShowReconcileDialog = !vOptions.ShowReconcileDialog;
Illustrate version conflict information from a reconcile operation
public void GetVersionConflictsInfoInUpdateDeleteType(ServiceConnectionProperties featureServiceConnectionProperties, string featureClassName)
{
  // To illustrate the conflict between versions,
  // the feature is updated in the child version and deleted in the parent version.

  long featureObjectIDForEdit = Int64.MinValue;

  // Get branch versioned service
  using (Geodatabase fsGeodatabase = new Geodatabase(featureServiceConnectionProperties))
  using (VersionManager versionManager = fsGeodatabase.GetVersionManager())
  using (Version defaultVersion = versionManager.GetDefaultVersion())
  using (Geodatabase defaultGeodatabase = defaultVersion.Connect())
  using (FeatureClass defaultFeatureClass = defaultGeodatabase.OpenDataset<FeatureClass>(featureClassName))
  using (FeatureClassDefinition defaultFeatureClassDefinition = defaultFeatureClass.GetDefinition())
  {
    // Create a feature in the default version to edit in a branch
    defaultGeodatabase.ApplyEdits(() =>
    {
      using (RowBuffer rowBuffer = defaultFeatureClass.CreateRowBuffer())
      {
        rowBuffer["NAME"] = "Loblolly Pine";
        rowBuffer["TREEAGE"] = 1;
        rowBuffer[defaultFeatureClassDefinition.GetShapeField()] = new MapPointBuilderEx(new Coordinate2D(1, 1),
          SpatialReferenceBuilder.CreateSpatialReference(4152, 0)).ToGeometry();

        using (Feature feature = defaultFeatureClass.CreateRow(rowBuffer))
        {
          featureObjectIDForEdit = feature.GetObjectID();
        }
      }
    });

    // Add newly created feature in the filter
    QueryFilter queryFilter = new QueryFilter { ObjectIDs = new List<long> { featureObjectIDForEdit } };

    // Create a branch version
    VersionDescription versionDescription = new VersionDescription("UpdateDeleteConflictType",
      "Update-Delete version conflict type", VersionAccessType.Private);

    // Edit the feature in the branch 
    using (Version editVersion = versionManager.CreateVersion(versionDescription))
    using (Geodatabase branchGeodatabase = editVersion.Connect())
    using (FeatureClass featureClass = branchGeodatabase.OpenDataset<FeatureClass>(featureClassName))
    using (RowCursor rowCursor = featureClass.Search(queryFilter, false))
    {
      branchGeodatabase.ApplyEdits(() =>
      {
        while (rowCursor.MoveNext())
        {
          using (Row row = rowCursor.Current)
          {
            row["TREEAGE"] = 100;
            row["NAME"] = $"{row["Name"]}_EditInBranch";
            row.Store();
          }
        }
      });

      // Delete the feature from the default version
      defaultFeatureClass.DeleteRows(queryFilter);

      // Reconcile options
      ReconcileOptions reconcileOptions = new ReconcileOptions(defaultVersion)
      {
        ConflictResolutionType = ConflictResolutionType.FavorEditVersion,
        ConflictDetectionType = ConflictDetectionType.ByRow,
        ConflictResolutionMethod = ConflictResolutionMethod.Continue
      };

      // Reconcile with default
      ReconcileResult reconcileResult = editVersion.Reconcile(reconcileOptions);

      // Check for conflicts
      bool hasConflictsReconcileResults = reconcileResult.HasConflicts;
      bool hasConflictsAfterReconcile = editVersion.HasConflicts();

      // Fetch conflicts
      IReadOnlyList<Conflict> conflictsAfterReconcile = editVersion.GetConflicts();

      // Iterate conflicts
      foreach (Conflict conflict in conflictsAfterReconcile)
      {
        // Object ID of row where conflict occurs
        long objectId = conflict.ObjectID;

        ConflictType conflictType = conflict.ConflictType;

        IReadOnlyList<FieldValue> ancestorVersionValues = conflict.AncestorVersionValues;
        object nameAncestor = ancestorVersionValues.FirstOrDefault(f => f.FieldName.Contains("NAME")).Value;
        object treeAgeAncestor = ancestorVersionValues.FirstOrDefault(f => f.FieldName.Contains("TREEAGE")).Value;

        IReadOnlyList<FieldValue> childVersionValues = conflict.ChildVersionValues;
        object nameChild = childVersionValues.FirstOrDefault(f => f.FieldName.Contains("NAME")).Value;
        object treeAgeChild = childVersionValues.FirstOrDefault(f => f.FieldName.Contains("TREEAGE")).Value;

        IReadOnlyList<FieldValue> parentVersionValues = conflict.ParentVersionValues;

        IReadOnlyList<Field> originalFields = defaultFeatureClassDefinition.GetFields();

        string datasetName = conflict.DatasetName;
      }
    }
  }
}
Reconciling and Posting a Version with its Parent in separate edit sessions
public void ReconcileAndPost(Geodatabase geodatabase)
{
  // Get a reference to our version and our parent
  if (geodatabase.IsVersioningSupported())
  {
    using (VersionManager versionManager = geodatabase.GetVersionManager())
    using (Version currentVersion = versionManager.GetCurrentVersion())
    using (Version parentVersion = currentVersion.GetParent())
    {

      //// Create a ReconcileDescription object
      //At 2.x - 
      //ReconcileDescription reconcileDescription = new ReconcileDescription(parentVersion);
      //reconcileDescription.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found
      //reconcileDescription.WithPost = true;

      //// Reconcile and post
      //ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileDescription);

      // ReconcileResult.HasConflicts can be checked as-needed

      // Create a ReconcileOptions object
      ReconcileOptions reconcileOptions = new ReconcileOptions(parentVersion);
      reconcileOptions.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found
      reconcileOptions.ConflictDetectionType = ConflictDetectionType.ByRow; //Default
      reconcileOptions.ConflictResolutionType = ConflictResolutionType.FavorTargetVersion;//or FavorEditVersion

      // Reconcile
      ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileOptions);
      if (!reconcileResult.HasConflicts)
      {
        //No conflicts, perform the post
        PostOptions postOptions = new PostOptions(parentVersion);
        //var postOptions = new PostOptions(); for default version
        postOptions.ServiceSynchronizationType = ServiceSynchronizationType.Synchronous;//Default
        currentVersion.Post(postOptions);
      }

    }
  }
}
Reconciling and Posting a Version with its Parent in the same edit session
public void ReconcileAndPost2(Geodatabase geodatabase)
{
  // Get a reference to our version and our parent
  if (geodatabase.IsVersioningSupported())
  {
    using (VersionManager versionManager = geodatabase.GetVersionManager())
    using (Version currentVersion = versionManager.GetCurrentVersion())
    using (Version parentVersion = currentVersion.GetParent())
    {

      //// Create a ReconcileDescription object
      //At 2.x - 
      //ReconcileDescription reconcileDescription = new ReconcileDescription(parentVersion);
      //reconcileDescription.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found
      //reconcileDescription.WithPost = true;

      //// Reconcile and post
      //ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileDescription);

      // ReconcileResult.HasConflicts can be checked as-needed

      // Create a ReconcileOptions object
      ReconcileOptions reconcileOptions = new ReconcileOptions(parentVersion);
      reconcileOptions.ConflictResolutionMethod = ConflictResolutionMethod.Continue; // continue if conflicts are found
      reconcileOptions.ConflictDetectionType = ConflictDetectionType.ByRow; //Default
      reconcileOptions.ConflictResolutionType = ConflictResolutionType.FavorTargetVersion;//or FavorEditVersion

      PostOptions postOptions = new PostOptions(parentVersion);
      //var postOptions = new PostOptions(); for default version
      postOptions.ServiceSynchronizationType = ServiceSynchronizationType.Synchronous;//Default

      // Reconcile
      ReconcileResult reconcileResult = currentVersion.Reconcile(reconcileOptions, postOptions);
      if (reconcileResult.HasConflicts)
      {
        //TODO resolve conflicts

      }

    }
  }
}
Inheritance Hierarchy

System.Object
   System.ValueType
      System.Enum
         ArcGIS.Core.Data.ConflictDetectionType

Requirements

Target Platforms: Windows 11, Windows 10

ArcGIS Pro version: 3 or higher.
See Also