Exemplo n.º 1
0
        public IEnumerable <DynamicPropertyMetadata> Build(IReflectedClass reflectedClass, IEnumerable <IReflectedClass> reflectedClasses)
        {
            var dynamicPropertyMetadatas = new List <DynamicPropertyMetadata>();

            foreach (var reflectedProperty in reflectedClass.ReflectedProperties.ToList())
            {
                var dynamicPropertyMetadata = new DynamicPropertyMetadata(reflectedProperty, reflectedClasses);
                if (_navigationPropertyManager.IsForeignKey(reflectedProperty, reflectedClass))
                {
                    dynamicPropertyMetadata = new DynamicForiegnKeyPropertyMetadata(reflectedProperty, reflectedClasses);
                }
                if (dynamicPropertyMetadata.IsDynamicEntity())
                {
                    dynamicPropertyMetadata = new DynamicComplexPropertyMetadata(reflectedProperty, reflectedClasses);
                }
                if (dynamicPropertyMetadata.IsDynamicCollection())
                {
                    dynamicPropertyMetadata = new DynamicCollectionEntityPropertyMetadata(reflectedProperty, reflectedClasses);
                }

                dynamicPropertyMetadatas.Add(dynamicPropertyMetadata);
            }
            return(dynamicPropertyMetadatas);
        }
        public DynamicForiegnKeyPropertyMetadata GetDynamicForiegnKeyPropertyMetadata(DynamicEntityMetadata dynamicEntityMetadata, DynamicComplexPropertyMetadata dynamicComplexPropertyMetadata)
        {
            var dynamicForiegnKeyPropertyMetadatas = dynamicEntityMetadata.DynamicPropertyMetadatas.Where(x => x.GetType() == typeof(DynamicForiegnKeyPropertyMetadata)).Select(x => (DynamicForiegnKeyPropertyMetadata)x).ToList();

            dynamicForiegnKeyPropertyMetadatas = dynamicForiegnKeyPropertyMetadatas
                                                 .Where(x => x.ComplexEntityPropertyMetadata.TypeName() == dynamicComplexPropertyMetadata.TypeName()).ToList();
            if (dynamicForiegnKeyPropertyMetadatas.Count == 0)
            {
                throw new Exception("Dynamic Foriegn key cannot be found in entity " + dynamicEntityMetadata.TypeName() + " for property " + dynamicComplexPropertyMetadata.TypeName());
            }

            if (dynamicForiegnKeyPropertyMetadatas.Count == 1)
            {
                return(dynamicForiegnKeyPropertyMetadatas.First());
            }

            dynamicForiegnKeyPropertyMetadatas = dynamicForiegnKeyPropertyMetadatas.Where(x =>
                                                                                          x.PropertyName().Contains(dynamicComplexPropertyMetadata.PropertyName())).ToList();

            if (dynamicForiegnKeyPropertyMetadatas.Count == 1)
            {
                return(dynamicForiegnKeyPropertyMetadatas.First());
            }

            throw new Exception("Dynamic Foriegn key cannot be found in entity " + dynamicEntityMetadata.TypeName() + " for property " + dynamicComplexPropertyMetadata.TypeName() + " because key property name does not contain complex property name");
        }