ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data.DDL.Knowledge Namespace / KnowledgeGraphEntityTypeDescription Class / KnowledgeGraphEntityTypeDescription Constructor / KnowledgeGraphEntityTypeDescription Constructor(String,IEnumerable<KnowledgeGraphPropertyDescription>,ShapeDescription)
The name to use for the description object
The collection of properties for the description object
The description to use for the shape. The spatial reference must match the spatial reference of the knowledge graph being used with the SchemaBuilder.
Example

In This Topic
    KnowledgeGraphEntityTypeDescription Constructor(String,IEnumerable<KnowledgeGraphPropertyDescription>,ShapeDescription)
    In This Topic
    Construct a KnowledgeGraphEntityTypeDescription with the given name, collection of property descriptions, and shape description. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax

    Parameters

    name
    The name to use for the description object
    propertyDescriptions
    The collection of properties for the description object
    shapeDescription
    The description to use for the shape. The spatial reference must match the spatial reference of the knowledge graph being used with the SchemaBuilder.
    Exceptions
    ExceptionDescription
    name is invalid
    This method or property must be called within the lambda passed to QueuedTask.Run.
    Remarks
    The name will be used for a new entity type if the description object is used for purposes of creation. Otherwise, it will be used to identify an existing entity type if the description object is used for the purposes of modify or delete. The spatial reference of the shape description parameter must match the spatial reference of the knowledge graph being used with the ArcGIS.Core.Data.DDL.SchemaBuilder. See ArcGIS.Core.Data.Knowledge.KnowledgeGraph.GetSpatialReference.
    Note: An ObjectID and GlobalID property description will automatically be added to the description object within the ArcGIS.Core.Data.DDL.SchemaBuilder (if these property descriptions were not included in the input propertyDescriptions collection)
    Example
    Create Entity and Relationship Types with SchemaBuilder
    await QueuedTask.Run(() =>
    {
      using (var kg = GetKnowledgeGraph())
      {
        if (kg == null)
          return;
    
        var entity_name = "PhoneCall";
        var relate_name = "WhoCalledWho";
    
        //Entity Fields
        var descs1 =
            new List<KnowledgeGraphPropertyDescription>();
        descs1.Add(
          new KnowledgeGraphPropertyDescription("PhoneOwner", FieldType.String));
        descs1.Add(
          new KnowledgeGraphPropertyDescription("PhoneNumber", FieldType.String));
        descs1.Add(
          new KnowledgeGraphPropertyDescription("LocationID", FieldType.BigInteger));
        descs1.Add(
          new KnowledgeGraphPropertyDescription("DateAndTime", FieldType.Date));
    
        //Relate Fields
        var descs2 =
            new List<KnowledgeGraphPropertyDescription>();
        descs2.Add(
          new KnowledgeGraphPropertyDescription("Foo", FieldType.String));
        descs2.Add(
          new KnowledgeGraphPropertyDescription("Bar", FieldType.String));
    
    
        var includeShape = true;//change to false to omit the shape column
        var hasZ = false;
        var hasM = false;
    
        KnowledgeGraphEntityTypeDescription entityDesc = null;
        KnowledgeGraphRelationshipTypeDescription relateDesc = null;
        if (includeShape)
        {
          var sr = kg.GetSpatialReference();
          var shp_desc = new ShapeDescription(GeometryType.Point, sr)
          {
            HasM = hasM,
            HasZ = hasZ
          };
          entityDesc = new KnowledgeGraphEntityTypeDescription(
            entity_name, descs1, shp_desc);
          relateDesc = new KnowledgeGraphRelationshipTypeDescription(
            relate_name, descs2, shp_desc);
        }
        else
        {
          entityDesc = new KnowledgeGraphEntityTypeDescription(
            entity_name, descs1);
          relateDesc = new KnowledgeGraphRelationshipTypeDescription(
            relate_name, descs2);
        }
        //Run the schema builder
        try
        {
          SchemaBuilder sb = new(kg);
          sb.Create(entityDesc);
          sb.Create(relateDesc);
          //Use the KnowledgeGraph extension method 'ApplySchemaEdits(...)'
          //to refresh the Pro UI
          if (!kg.ApplySchemaEdits(sb))
          {
            var err_msg = string.Join(",", sb.ErrorMessages.ToArray());
            System.Diagnostics.Debug.WriteLine($"Entity/Relate Create error: {err_msg}");
          }
        }
        catch (Exception ex)
        {
          System.Diagnostics.Debug.WriteLine(ex.ToString());
        }
      }
    });
    
    Modify Entity and Relationship Type Schemas with SchemaBuilder
    await QueuedTask.Run(() =>
    {
      using (var kg = GetKnowledgeGraph())
      {
        if (kg == null)
          return;
    
        var entity_name = "PhoneCall";
        var relate_name = "WhoCalledWho";
    
        var kvp_entity = kg.GetDataModel().GetEntityTypes()
             .First(r => r.Key == entity_name);
        var kvp_relate = kg.GetDataModel().GetRelationshipTypes()
                       .First(r => r.Key == relate_name);
    
        //Let's delete one field and add a new one from each
        //A field gets deleted implicitly if it is not included in the list of
        //fields - or "properties" in this case....so we will remove the last
        //property from the list
        var entity_props = kvp_entity.Value.GetProperties().Reverse().Skip(1).Reverse();
        var prop_descs = new List<KnowledgeGraphPropertyDescription>();
    
        foreach (var prop in entity_props)
        {
          if (prop.FieldType == FieldType.Geometry)
          {
            continue;//skip shape
          }
          var prop_desc = new KnowledgeGraphPropertyDescription(prop);
          prop_descs.Add(prop_desc);
        }
        //deal with shape - we need to keep it
        //SchemaBuilder deletes any field not included in the "modify" list
        ShapeDescription shape_desc = null;
        if (kvp_entity.Value.GetIsSpatial())
        {
          var geom_def = kvp_entity.Value.GetShapeDefinition();
          var shape_name = kvp_entity.Value.GetShapeField();
          shape_desc = new ShapeDescription(
            shape_name, geom_def.geometryType, geom_def.sr);
        }
        //add the new entity property
        prop_descs.Add(
          KnowledgeGraphPropertyDescription.CreateStringProperty("foo", 10));
        //make a description for the entity type - ok if shape_desc is null
        var entityDesc = new KnowledgeGraphEntityTypeDescription(
          entity_name, prop_descs, shape_desc);
    
        //Add the entity type description to the schema builder using 'Modify'
        SchemaBuilder sb = new(kg);
        sb.Modify(entityDesc);
    
        //Repeat for the relationship - assuming we have at least one custom attribute field
        //that can be deleted on our relationship schema...
        var rel_props = kvp_relate.Value.GetProperties().Reverse().Skip(1).Reverse();
        var rel_prop_descs = new List<KnowledgeGraphPropertyDescription>();
    
        foreach (var prop in rel_props)
        {
          if (prop.FieldType == FieldType.Geometry)
          {
            continue;//skip shape
          }
          var prop_desc = new KnowledgeGraphPropertyDescription(prop);
          rel_prop_descs.Add(prop_desc);
        }
        //deal with shape - we need to keep it
        //SchemaBuilder deletes any field not included in the "modify" list
        ShapeDescription shape_desc_rel = null;
        if (kvp_relate.Value.GetIsSpatial())
        {
          var geom_def = kvp_relate.Value.GetShapeDefinition();
          var shape_name = kvp_relate.Value.GetShapeField();
          shape_desc_rel = new ShapeDescription(
            shape_name, geom_def.geometryType, geom_def.sr);
        }
        //add a new relationship property
        rel_prop_descs.Add(
          KnowledgeGraphPropertyDescription.CreateStringProperty("bar", 10));
        //make a description for the relationship type - ok if shape_desc is null
        var relDesc = new KnowledgeGraphRelationshipTypeDescription(
          relate_name, rel_prop_descs, shape_desc_rel);
    
        //Add the relationship type description to the schema builder using 'Modify'
        sb.Modify(relDesc);
    
        //Run the schema builder
        try
        {
          //Use the KnowledgeGraph extension method 'ApplySchemaEdits(...)'
          //to refresh the Pro UI
          if (!kg.ApplySchemaEdits(sb))
          {
            var err_msg = string.Join(",", sb.ErrorMessages.ToArray());
            System.Diagnostics.Debug.WriteLine($"Entity/Relate Modify error: {err_msg}");
          }
        }
        catch (Exception ex)
        {
          System.Diagnostics.Debug.WriteLine(ex.ToString());
        }
      }
    });
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3.4 or higher.
    See Also