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 string GetForiegnKeyNameByCollectionProperty(DynamicEntityMetadata dynamicEntityMetadata, string typeName, DynamicCollectionEntityPropertyMetadata dynamicCollectionEntityPropertyMetadata) { if (dynamicCollectionEntityPropertyMetadata.InverseProperty == null) { var complexProperties = dynamicEntityMetadata.DynamicPropertyMetadatas.Where(x => x.TypeName() == typeName).ToList(); if (complexProperties.Count == 1) { return(_namingConventionManager.GetForiegnKeyByComplexProperty(dynamicEntityMetadata.TypeName(), complexProperties.First().PropertyName())); } if (complexProperties.Count == 0) { throw new Exception("GetForiegnKeyNameByCollectionProperty could not find complex property for " + dynamicCollectionEntityPropertyMetadata.PropertyName() + " inside " + typeName); } else { throw new Exception("GetForiegnKeyNameByCollectionProperty could not find complex property for " + dynamicCollectionEntityPropertyMetadata.PropertyName() + " because two or more " + typeName + " exists"); } } else { var fkName = _namingConventionManager.GetForiegnKeyByComplexProperty(dynamicEntityMetadata.TypeName(), dynamicCollectionEntityPropertyMetadata.InverseProperty); if (dynamicEntityMetadata.DynamicPropertyMetadatas.All(x => x.PropertyName() != fkName)) { throw new Exception("GetForiegnKeyNameByCollectionProperty could not find inverse property for " + dynamicCollectionEntityPropertyMetadata.InverseProperty); } return(fkName); } }