コード例 #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);
        }
コード例 #2
0
 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);
     }
 }