コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 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();
 }
コード例 #6
0
        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);
        }
コード例 #7
0
        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;
                        }
                    }
                }
            }
        }