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); }
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); }
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)); } } }
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); }
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)); }
protected DynamicType(DynamicTypeDefinition dynamicTypeDefinition) { _dynamicTypeDefinition = dynamicTypeDefinition; }
public DynamicType09(DynamicTypeDefinition dynamicTypeDefinition) : base(dynamicTypeDefinition) { }