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"); }