コード例 #1
0
        public DynamicTypeDefinition GetDynamicTypeDefinition(String tableName)
        {
            if (_tableNameTypes.TryGetValue(tableName, out Type dynamicTypeType))
            {
                return(GetDynamicTypeDefinition(dynamicTypeType));
            }

            dynamicTypeType = GetDynamicTypeType();
            String entityName            = MetadataProvider.GetEntityName(tableName);
            var    dynamicTypeDefinition = new DynamicTypeDefinition(dynamicTypeType, entityName, tableName);

            _tableNameTypes.Add(tableName, dynamicTypeType);
            _dynamicTypeDefinitions.Add(dynamicTypeType, dynamicTypeDefinition);
            return(dynamicTypeDefinition);
        }
コード例 #2
0
        internal DynamicTypeDefinition GetOrAddDynamicTypeDefinition(String tableEdmName, bool isQueryType)
        {
            if (_tableEdmNameTypes.TryGetValue(tableEdmName, out Type dynamicTypeType))
            {
                return(GetDynamicTypeDefinition(dynamicTypeType));
            }

            _dynamicTypeIndex++;
            dynamicTypeType = Type.GetType(typeof(DynamicType).FullName + _dynamicTypeIndex.ToString("D2"));
            var dynamicTypeDefinition = new DynamicTypeDefinition(dynamicTypeType, tableEdmName, tableEdmName, isQueryType);

            _tableEdmNameTypes.Add(tableEdmName, dynamicTypeType);
            _dynamicTypeDefinitions.Add(dynamicTypeType, dynamicTypeDefinition);
            return(dynamicTypeDefinition);
        }
コード例 #3
0
        private void CreateNavigationProperties(Microsoft.EntityFrameworkCore.ModelBuilder modelBuilder, String tableName)
        {
            foreach (String propertyName in MetadataProvider.GetNavigationProperties(tableName))
            {
                DynamicDependentPropertyInfo dependentInfo = MetadataProvider.GetDependentProperties(tableName, propertyName);

                EntityType dependentEntityType = CreateEntityType(modelBuilder, MetadataProvider.GetTableName(dependentInfo.DependentEntityName));
                EntityType principalEntityType = CreateEntityType(modelBuilder, MetadataProvider.GetTableName(dependentInfo.PrincipalEntityName));

                var dependentProperties = new List <Property>();
                foreach (String dependentPropertyName in dependentInfo.DependentPropertyNames)
                {
                    dependentProperties.Add((Property)dependentEntityType.GetProperty(dependentPropertyName));
                }

                ForeignKey fkey = dependentEntityType.FindForeignKey(dependentProperties, principalEntityType.FindPrimaryKey(), principalEntityType);
                if (fkey == null)
                {
                    var principalProperties = new List <Property>();
                    foreach (String principalPropertyName in dependentInfo.PrincipalPropertyNames)
                    {
                        principalProperties.Add((Property)principalEntityType.GetProperty(principalPropertyName));
                    }

                    Key pkey = principalEntityType.FindKey(principalProperties);
                    if (pkey == null)
                    {
                        pkey = principalEntityType.AddKey(principalProperties);
                    }

                    fkey = dependentEntityType.AddForeignKey(dependentProperties, pkey, principalEntityType);
                }

                DynamicTypeDefinition dynamicTypeDefinition = TypeDefinitionManager.GetDynamicTypeDefinition(tableName);
                if (dependentInfo.IsCollection)
                {
                    Navigation navigation = fkey.HasPrincipalToDependent(propertyName);
                    navigation.SetField(dynamicTypeDefinition.GetCollectionFiledName(propertyName));
                }
                else
                {
                    Navigation navigation = fkey.HasDependentToPrincipal(propertyName);
                    navigation.SetField(dynamicTypeDefinition.GetSingleFiledName(propertyName));
                }
            }
        }
コード例 #4
0
        internal DynamicTypeDefinition GetOrAddDynamicTypeDefinition(String tableEdmName, bool isQueryType)
        {
            if (_tableEdmNameTypes.TryGetValue(tableEdmName, out Type? dynamicTypeType))
            {
                return(GetDynamicTypeDefinition(dynamicTypeType));
            }

            _dynamicTypeIndex++;
            dynamicTypeType = Type.GetType(typeof(DynamicType).FullName + _dynamicTypeIndex.ToString(CultureInfo.InvariantCulture));
            if (dynamicTypeType == null)
            {
                throw new InvalidProgramException("Cannot create DynamicType index " + _dynamicTypeIndex.ToString(CultureInfo.InvariantCulture) + " out of range");
            }

            var dynamicTypeDefinition = new DynamicTypeDefinition(dynamicTypeType, tableEdmName, tableEdmName, isQueryType);

            _tableEdmNameTypes.Add(tableEdmName, dynamicTypeType);
            _dynamicTypeDefinitions.Add(dynamicTypeType, dynamicTypeDefinition);
            return(dynamicTypeDefinition);
        }
コード例 #5
0
        protected override OeShadowPropertyInfo CreateShadowProperty(IPropertyBase efProperty)
        {
            if (efProperty is INavigation efNavigation)
            {
                Type propertyType = efNavigation.IsDependentToPrincipal() ?
                                    efNavigation.ForeignKey.PrincipalEntityType.ClrType : efNavigation.ForeignKey.DeclaringEntityType.ClrType;

                if (efNavigation.IsCollection())
                {
                    propertyType = typeof(ICollection <>).MakeGenericType(new Type[] { propertyType });
                }

                return(new OeShadowPropertyInfo(efNavigation.DeclaringType.ClrType, propertyType, efNavigation.Name));
            }

            DynamicTypeDefinition typeDefinition = _typeDefinitionManager.GetDynamicTypeDefinition(efProperty.DeclaringType.ClrType);
            MethodInfo            getMethodInfo  = typeDefinition.AddShadowPropertyGetMethodInfo(efProperty.Name, efProperty.ClrType);

            return(new OeShadowPropertyInfo(efProperty.DeclaringType.ClrType, efProperty.ClrType, efProperty.Name, getMethodInfo));
        }
コード例 #6
0
 protected DynamicType(DynamicTypeDefinition dynamicTypeDefinition)
 {
     _dynamicTypeDefinition = dynamicTypeDefinition;
 }
コード例 #7
0
 public DynamicType09(DynamicTypeDefinition dynamicTypeDefinition) : base(dynamicTypeDefinition)
 {
 }