ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.Data Namespace / FeatureClassDefinition Class
Members Example

In This Topic
    FeatureClassDefinition Class
    In This Topic
    Represents the schema and properties of a FeatureClass.
    Object Model
    FeatureClassDefinition ClassEnvelope ClassSpatialReference Class
    Syntax
    Public Class FeatureClassDefinition 
       Inherits TableDefinition
       Implements System.IDisposable 
    public class FeatureClassDefinition : TableDefinition, System.IDisposable  
    Example
    Obtaining Definition from Geodatabase
    {
      await QueuedTask.Run(() =>
      {
        using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
        {
          // Remember that for Enterprise databases you have to qualify your dataset names with the DatabaseName and UserName.
          TableDefinition enterpriseTableDefinition = geodatabase.GetDefinition<TableDefinition>("LocalGovernment.GDB.CitizenContactInfo");
    
          // It does not matter if the dataset is within a FeatureDataset or not.
          FeatureClassDefinition featureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>("LocalGovernment.GDB.FireStation");
    
          // GetDefinition For a RelationshipClass.
          RelationshipClassDefinition relationshipClassDefinition = geodatabase.GetDefinition<RelationshipClassDefinition>(
              "LocalGovernment.GDB.AddressPointHasSiteAddresses");
    
          // GetDefinition For a FeatureDataset.
          FeatureDatasetDefinition featureDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>("LocalGovernment.GDB.Address");
        }
      });
    }
    Obtaining List of Definitions from Geodatabase
    {
      await QueuedTask.Run(() =>
      {
        using (Geodatabase geodatabase = new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
        {
          IReadOnlyList<FeatureClassDefinition> enterpriseDefinitions = geodatabase.GetDefinitions<FeatureClassDefinition>();
          IEnumerable<Definition> featureClassesHavingGlobalID = enterpriseDefinitions.Where(definition => definition.HasGlobalID());
    
          IReadOnlyList<FeatureDatasetDefinition> featureDatasetDefinitions = geodatabase.GetDefinitions<FeatureDatasetDefinition>();
          bool electionRelatedFeatureDatasets = featureDatasetDefinitions.Any(definition => definition.GetName().Contains("Election"));
    
          IReadOnlyList<AttributedRelationshipClassDefinition> attributedRelationshipClassDefinitions = geodatabase.GetDefinitions<AttributedRelationshipClassDefinition>();
    
          IReadOnlyList<RelationshipClassDefinition> relationshipClassDefinitions = geodatabase.GetDefinitions<RelationshipClassDefinition>();
        }
      });
    }
    Obtaining Definitions from a Feature Service by Layer ID
    {
      //Url examples for (federated) feature services
      //(by "ref" online):
      var url =
          @"https://sampleserver6.arcgisonline.com/arcgis/rest/services/SF311/FeatureServer";
      //(federated by ref on portal)
      //https://portal.example.com/server/rest/services/FeatureServiceName/FeatureServer");
      //(federated by value - Hosted - on portal)
      //https://portal.example.com/server/rest/services/Hosted/FeatureServiceName/FeatureServer");
    
      await QueuedTask.Run(() =>
      {
        var uri = new Uri(url, UriKind.Absolute);
        using (var fs_db = new ArcGIS.Core.Data.Geodatabase(new ServiceConnectionProperties(uri)))
        {
          //Assuming that id 0 is a FeatureClass for the given service
          FeatureClassDefinition featureClassDefinition =
              fs_db.GetDefinition<FeatureClassDefinition>("0");
          string shapeField = featureClassDefinition.GetShapeField();
          IReadOnlyList<Field> fields = featureClassDefinition.GetFields();
    
          //Assuming that id 1 is a Table for the given service
          TableDefinition tableDefinition =
                fs_db.GetDefinition<TableDefinition>("1");
          string objectIDField = tableDefinition.GetObjectIDField();
        }
      });
    }
    Obtaining Related Definitions from Geodatabase
    {
      await QueuedTask.Run(() =>
      {
        using (Geodatabase geodatabase =
               new Geodatabase(new DatabaseConnectionFile(new Uri("path\\to\\sde\\file\\sdefile.sde"))))
        {
          // Remember the qualification of DatabaseName. for the RelationshipClass.
    
          RelationshipClassDefinition enterpriseDefinition = geodatabase.GetDefinition<RelationshipClassDefinition>("LocalGovernment.GDB.AddressPointHasSiteAddresses");
          IReadOnlyList<Definition> enterpriseDefinitions = geodatabase.GetRelatedDefinitions(enterpriseDefinition,
              DefinitionRelationshipType.DatasetsRelatedThrough);
          FeatureClassDefinition enterpriseAddressPointDefinition = enterpriseDefinitions.First(defn => defn.GetName().Equals("LocalGovernment.GDB.AddressPoint"))
              as FeatureClassDefinition;
    
          FeatureDatasetDefinition featureDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>("LocalGovernment.GDB.Address");
          IReadOnlyList<Definition> datasetsInAddressDataset = geodatabase.GetRelatedDefinitions(featureDatasetDefinition,
              DefinitionRelationshipType.DatasetInFeatureDataset);
          FeatureClassDefinition addressPointInAddressDataset = datasetsInAddressDataset.First(defn => defn.GetName().Equals("LocalGovernment.GDB.AddressPoint"))
              as FeatureClassDefinition;
    
          RelationshipClassDefinition addressPointHasSiteAddressInAddressDataset = datasetsInAddressDataset.First(defn =>
                defn.GetName().Equals("LocalGovernment.GDB.AddressPointHasSiteAddresses"))
              as RelationshipClassDefinition;
        }
      });
    }
    Sorting a Table
    {
      //Must be called within QueuedTask.Run()
      RowCursor SortWorldCities(FeatureClass worldCitiesTable)
      {
        using (FeatureClassDefinition featureClassDefinition = worldCitiesTable.GetDefinition())
        {
          Field countryField = featureClassDefinition.GetFields()
            .First(x => x.Name.Equals("COUNTRY_NAME"));
    
          Field cityNameField = featureClassDefinition.GetFields()
            .First(x => x.Name.Equals("CITY_NAME"));
    
          // Create SortDescription for Country field
          SortDescription countrySortDescription = new SortDescription(countryField);
          countrySortDescription.CaseSensitivity = CaseSensitivity.Insensitive;
          countrySortDescription.SortOrder = SortOrder.Ascending;
    
          // Create SortDescription for City field
          SortDescription citySortDescription = new SortDescription(cityNameField);
          citySortDescription.CaseSensitivity = CaseSensitivity.Insensitive;
          citySortDescription.SortOrder = SortOrder.Ascending;
    
          // Create our TableSortDescription
          TableSortDescription tableSortDescription = new TableSortDescription(
            new List<SortDescription>() { countrySortDescription, citySortDescription });
    
          return worldCitiesTable.Sort(tableSortDescription);
        }
      }
    }
    Inheritance Hierarchy
    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.0 or higher.
    See Also