private NavigationProperty CreateNavigationProperty(
            ClientModelProperty property,
            ClientModelMetadata modelMetadata)
        {
            var fkPropertyNames = modelMetadata.Associations[property.Name].ForeignKeyPropertyNames;

            return(new NavigationProperty
            {
                IsScalar = property.IsEntityType,
                EntityTypeName = GetBreezeTypeFullName(property.Type),
                NameOnServer = property.Name,
                AssociationName = GetAssociationName(modelMetadata.Type.Name, property.Type.Name, fkPropertyNames),
                InvForeignKeyNamesOnServer = property.IsEntityType ? null : fkPropertyNames,
                ForeignKeyNamesOnServer = property.IsEntityType ? fkPropertyNames : null,
            });
        }
        private void AddClientModelType(ClientModelMetadata modelMetadata, BreezeMetadata metadata)
        {
            var modelConfiguration = _breezeConfigurator.GetModelConfiguration(modelMetadata.Type);
            var entityType         = GetOrCreateEntityType(
                modelMetadata.Type,
                modelConfiguration,
                metadata);

            entityType.IsUnmapped = true;

            foreach (var property in modelMetadata.Properties)
            {
                var memberConfiguration = modelConfiguration.GetMember(property.Name);
                if (memberConfiguration?.Ignored == true)
                {
                    continue;
                }

                if (property.IsAssociationType)
                {
                    entityType.NavigationProperties.Add(CreateNavigationProperty(property, modelMetadata));
                    continue;
                }

                if (property.IsComplexType)
                {
                    AddComplexType(property.Type, metadata);
                }

                var dataProperty = CreateDataProperty(property, memberConfiguration, entityType);
                if (property.IsPartOfKey)
                {
                    entityType.DataProperties.Insert(0, dataProperty);
                }
                else
                {
                    entityType.DataProperties.Add(dataProperty);
                }
            }

            AddSyntheticMembers(entityType, modelConfiguration);
            AddSyntheticForeignKeyProperties(modelMetadata, entityType, modelConfiguration);
        }