private static PropertyInfo GetPrincipalNavigationProperty(OeEdmModelMetadataProvider metadataProvider, EntityTypeInfo principalInfo, EntityTypeInfo dependentInfo, PropertyInfo dependentNavigationProperty) { PropertyInfo inverseProperty = metadataProvider.GetInverseProperty(dependentNavigationProperty); if (inverseProperty != null) { return(inverseProperty); } foreach (PropertyInfo clrProperty in metadataProvider.GetProperties(principalInfo.ClrType)) { if (clrProperty.PropertyType == dependentInfo.ClrType || Parsers.OeExpressionHelper.GetCollectionItemTypeOrNull(clrProperty.PropertyType) == dependentInfo.ClrType) { inverseProperty = metadataProvider.GetInverseProperty(clrProperty); if (inverseProperty == null || inverseProperty == dependentNavigationProperty) { return(clrProperty); } } } return(null); }
private static PropertyInfo[] GetDependentStructuralProperties(OeEdmModelMetadataProvider metadataProvider, EntityTypeInfo dependentInfo, PropertyInfo dependentProperty) { var dependentProperties = new List <PropertyInfo>(); PropertyInfo[] fkey = metadataProvider.GetForeignKey(dependentProperty); if (fkey == null) { foreach (PropertyInfo propertyInfo in metadataProvider.GetProperties(dependentInfo.ClrType)) { fkey = metadataProvider.GetForeignKey(propertyInfo); if (fkey != null && fkey.Length == 1 && fkey[0] == dependentProperty) { dependentProperties.Add(propertyInfo); } } if (dependentProperties.Count == 0) { PropertyInfo clrProperty = dependentInfo.ClrType.GetPropertyIgnoreCase(dependentProperty.Name + "id"); if (clrProperty != null) { dependentProperties.Add(clrProperty); } } } else { dependentProperties.AddRange(fkey); } PropertyInfo[] dependentPropertyArray = dependentProperties.ToArray(); metadataProvider.SortClrPropertyByOrder(dependentPropertyArray); return(dependentPropertyArray); }
public void BuildStructuralProperties(EdmModel edmModel, Dictionary <Type, EntityTypeInfo> entityTypes, Dictionary <Type, EdmEnumType> enumTypes, Dictionary <Type, EdmComplexType> complexTypes) { foreach (PropertyInfo clrProperty in _metadataProvider.GetProperties(ClrType)) { if (!_metadataProvider.IsNotMapped(clrProperty)) { EdmStructuralProperty?edmProperty = BuildStructuralProperty(entityTypes, enumTypes, complexTypes, clrProperty); if (edmProperty != null && _metadataProvider.IsDatabaseGenerated(clrProperty)) { var databaseGenerated = new EdmVocabularyAnnotation(edmProperty, CoreVocabularyModel.ComputedTerm, new EdmBooleanConstant(true)); edmModel.SetVocabularyAnnotation(databaseGenerated); } } } if (_isDbQuery) { AddDbQueryKeys(); } else { AddKeys(); } }
private static PropertyInfo GetPartnerProperty(OeEdmModelMetadataProvider metadataProvider, Type itemType, Type itemType2) { PropertyInfo partnerProperty = null; PropertyInfo otherSideProperty = null; foreach (PropertyInfo propertyInfo in metadataProvider.GetProperties(itemType2)) { if (Parsers.OeExpressionHelper.IsPrimitiveType(propertyInfo.PropertyType)) { continue; } if (propertyInfo.PropertyType == itemType) { if (partnerProperty == null) { partnerProperty = propertyInfo; } else { if (otherSideProperty != null) { return(null); } if (metadataProvider.GetInverseProperty(partnerProperty) == null) { otherSideProperty = propertyInfo; } else if (metadataProvider.GetInverseProperty(propertyInfo) == null) { otherSideProperty = partnerProperty; partnerProperty = propertyInfo; } else { return(null); } } } else { if (Parsers.OeExpressionHelper.GetCollectionItemTypeOrNull(propertyInfo.PropertyType) == null) { if (otherSideProperty != null) { return(null); } otherSideProperty = propertyInfo; } else { return(null); } } } return(partnerProperty); }
public void BuildProperties(Dictionary <Type, EntityTypeInfo> entityTypes, Dictionary <Type, EdmEnumType> enumTypes, Dictionary <Type, EdmComplexType> complexTypes) { foreach (PropertyInfo clrProperty in _metadataProvider.GetProperties(ClrType)) { if (!_metadataProvider.IsNotMapped(clrProperty)) { BuildProperty(entityTypes, enumTypes, complexTypes, clrProperty); } } AddKeys(); }
private IEdmNavigationProperty GetJoinNavigationProperty(EntityTypeInfo typeInfo, Type joinClassType) { foreach (PropertyInfo propertyInfo in _metadataProvider.GetProperties(typeInfo.ClrType)) { Type itemType = Parsers.OeExpressionHelper.GetCollectionItemTypeOrNull(propertyInfo.PropertyType); if (itemType == joinClassType) { foreach (IEdmNavigationProperty edmNavigationProperty in typeInfo.EdmType.NavigationProperties()) { if (String.CompareOrdinal(edmNavigationProperty.Name, propertyInfo.Name) == 0) { return(edmNavigationProperty); } } } } return(null); }
private static IEnumerable <(PropertyInfo Many, PropertyInfo Join)> GetManyToManyInfo(OeEdmModelMetadataProvider metadataProvider, Type entityType) { IReadOnlyList <PropertyInfo> properties = metadataProvider.GetManyToManyProperties(entityType); for (int i = 0; i < properties.Count; i++) { Type itemType = Parsers.OeExpressionHelper.GetCollectionItemType(properties[i].PropertyType); foreach (PropertyInfo property2 in metadataProvider.GetProperties(entityType)) { Type itemType2 = Parsers.OeExpressionHelper.GetCollectionItemTypeOrNull(property2.PropertyType); if (itemType2 != null) { PropertyInfo partnerProperty = GetPartnerProperty(metadataProvider, itemType, itemType2); if (partnerProperty != null && itemType == partnerProperty.PropertyType) { yield return(properties[i], partnerProperty); break; } } } } }