ArcGIS Pro 2.8 API Reference Guide
Modify(FeatureClassDescription) Method
Example 

ArcGIS.Core.Data.DDL Namespace > SchemaBuilder Class > Modify Method : Modify(FeatureClassDescription) Method
Indicates the ArcGIS.Core.Data.FeatureClass to be modified.
Enqueue the modify operation on the object referred to by the FeatureClassDescription.
Syntax

Parameters

featureClassDescription
Indicates the ArcGIS.Core.Data.FeatureClass to be modified.
Exceptions
ExceptionDescription
featureClassDescription is null.
Example
      
// Adding following fields to the 'Parcels' FeatureClass
// Global ID
// Parcel_ID
// Tax_Code
// Parcel_Address
      

// The FeatureClass to add fields
string featureClassName = "Parcels";

FeatureClassDefinition originalFeatureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>(featureClassName);
FeatureClassDescription originalFeatureClassDescription = new FeatureClassDescription(originalFeatureClassDefinition);

// The four new fields to add on the 'Parcels' FeatureClass
FieldDescription globalIdField = FieldDescription.CreateGlobalIDField();
FieldDescription parcelIdDescription = new FieldDescription("Parcel_ID", FieldType.GUID);
FieldDescription taxCodeDescription = FieldDescription.CreateIntegerField("Tax_Code");
FieldDescription addressDescription = FieldDescription.CreateStringField("Parcel_Address", 150);

List<FieldDescription> fieldsToAdd = new List<FieldDescription> { globalIdField, parcelIdDescription, 
  taxCodeDescription, addressDescription };

// Add new fields on the new FieldDescription list
List<FieldDescription> modifiedFieldDescriptions = new List<FieldDescription>(originalFeatureClassDescription.FieldDescriptions);
modifiedFieldDescriptions.AddRange(fieldsToAdd);

// The new FeatureClassDescription with additional fields
FeatureClassDescription modifiedFeatureClassDescription = new FeatureClassDescription(originalFeatureClassDescription.Name,
  modifiedFieldDescriptions, originalFeatureClassDescription.ShapeDescription);

SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);

// Update the 'Parcels' FeatureClass with newly added fields
schemaBuilder.Modify(modifiedFeatureClassDescription);
bool modifyStatus = schemaBuilder.Build();

if (!modifyStatus)
{
  IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}
// Removing all fields from 'Parcels' table except following 
// Tax_Code
// Parcel_Address
      

// The table to remove fields
string tableName = "Parcels";

TableDefinition tableDefinition = geodatabase.GetDefinition<TableDefinition>(tableName);
IReadOnlyList<Field> fields = tableDefinition.GetFields();

// Existing fields from 'Parcels' table
Field taxCodeField = fields.First(f => f.Name.Equals("Tax_Code"));
Field parcelAddressField = fields.First(f => f.Name.Equals("Parcel_Address"));

FieldDescription taxFieldDescription = new FieldDescription(taxCodeField);
FieldDescription parcelAddressFieldDescription = new FieldDescription(parcelAddressField);
      
// Fields to retain in modified table
List<FieldDescription> fieldsToBeRetained =new List<FieldDescription>()
{
  taxFieldDescription, parcelAddressFieldDescription 
};

// New description of the 'Parcels' table with the 'Tax_Code' and 'Parcel_Address' fields
TableDescription modifiedTableDescription = new TableDescription(tableName, fieldsToBeRetained);

SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);

// Remove all fields except the 'Tax_Code' and 'Parcel_Address' fields
schemaBuilder.Modify(modifiedTableDescription);
schemaBuilder.Build();

// Adding a field,'PipeType', which uses the coded value domain to the 'Pipes' FeatureClass

//The FeatureClass to add field
string featureClassName = "Pipes";

SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);

// Create a CodedValueDomain description for water pipes
CodedValueDomainDescription pipeDomainDescription = new CodedValueDomainDescription("WaterPipeTypes", FieldType.String,
  new SortedList<object, string> { { "Copper", "C_1" },
    { "Steel", "S_2" } })
{
  SplitPolicy = SplitPolicy.Duplicate,
  MergePolicy = MergePolicy.DefaultValue
};

// Create a coded value domain token
CodedValueDomainToken codedValueDomainToken = schemaBuilder.Create(pipeDomainDescription);

// Create a new description from domain token
CodedValueDomainDescription codedValueDomainDescription = new CodedValueDomainDescription(codedValueDomainToken);

// Create a field named as 'PipeType' using a domain description
FieldDescription domainFieldDescription = new FieldDescription("PipeType", FieldType.String)
{ DomainDescription = codedValueDomainDescription };

//Retrieve existing information for 'Pipes' FeatureClass
FeatureClassDefinition originalFeatureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>(featureClassName);
FeatureClassDescription originalFeatureClassDescription = new FeatureClassDescription(originalFeatureClassDefinition);

// Add domain field on existing fields
List<FieldDescription> modifiedFieldDescriptions = new List<FieldDescription>(originalFeatureClassDescription.FieldDescriptions) { domainFieldDescription };

// Create a new description with updated fields for 'Pipes' FeatureClass 
FeatureClassDescription featureClassDescription = new FeatureClassDescription(originalFeatureClassDescription.Name, modifiedFieldDescriptions,
  originalFeatureClassDescription.ShapeDescription);

// Update the 'Pipes' FeatureClass with domain field
schemaBuilder.Modify(featureClassDescription);

// Build status
bool buildStatus = schemaBuilder.Build();

// Build errors
if (!buildStatus)
{
  IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

Requirements

Target Platforms: Windows 10, Windows 8.1

See Also

Reference

SchemaBuilder Class
SchemaBuilder Members
Overload List