RelatedModelMetadata[] GetRelatedModelMetadata(EntityType entityType) { var foreignKeys = GetForeignKeys(entityType); List <RelatedModelMetadata> relatedModelMetadata = new List <RelatedModelMetadata>(); for (int x = 0; x < foreignKeys.Count; x++) { RelatedModelMetadata relatedModel = new RelatedModelMetadata(); foreach (var navigationProperty in entityType.NavigationProperties) { EntityType fromEntity = navigationProperty.FromEndMember.GetEntityType(); EntityType toEntity = navigationProperty.ToEndMember.GetEntityType(); var relatedEntity = relatedModelMetadata.Where(re => re.AssociationPropertyName == toEntity.Name).Count(); if (relatedEntity != 0) { continue; } RelationshipType relationshipType = navigationProperty.RelationshipType; relatedModel.AssociationPropertyName = navigationProperty.Name; //((AssociationType)(relationshipType)).ReferentialConstraints[0].ToProperties[0].Name; //if (fromEntity.Properties.Count > 1) // relatedModel.DisplayPropertyName = toEntity.Properties[1].Name; //else relatedModel.DisplayPropertyName = toEntity.Properties[0].Name; relatedModel.EntitySetName = toEntity.Name;//navigationProperty.Name; relatedModel.PrimaryKeyNames = new string[] { fromEntity.KeyMembers[0].Name }; relatedModel.ShortTypeName = fromEntity.Name; relatedModel.TypeName = fromEntity.FullName; if (!relatedModelMetadata.Contains(relatedModel)) { relatedModelMetadata.Add(relatedModel); } string AssociationName = ((AssociationType)(relationshipType)).ReferentialConstraints[0].ToProperties[0].Name; if (AssociationName == foreignKeys[x].Name) { break; } } relatedModel.ForeignKeyPropertyNames = new string[] { foreignKeys[x].Name }; } return(relatedModelMetadata.ToArray()); }
// A foreign key, e.g. CategoryID, will have a value expression of Category.CategoryID public string GetValueExpression(PropertyMetadata property) { RelatedModelMetadata propertyModel = GetRelatedModelMetadata(property); return(propertyModel != null ? propertyModel.AssociationPropertyName + "." + propertyModel.DisplayPropertyName : property.PropertyName); }
// A foreign key, e.g. CategoryID, will have an association name of Category public string GetAssociationName(PropertyMetadata property) { RelatedModelMetadata propertyModel = GetRelatedModelMetadata(property); return(propertyModel != null ? propertyModel.AssociationPropertyName : property.PropertyName); }