private HelperClassesGenerationInfo CompileMissingClasses(DataTypeDescriptor dataTypeDescriptor, Dictionary <DataTypeDescriptor, IEnumerable <SqlDataTypeStoreDataScope> > allSqlDataTypeStoreDataScopes, Dictionary <SqlDataTypeStoreTableKey, StoreTypeInfo> fields, List <SqlDataTypeStoreDataScope> storeDataScopesToCompile, List <SqlDataTypeStoreDataScope> storeDataScopesAlreadyCompiled) { return(new HelperClassesGenerationInfo { GenerateCodeAction = codeGenerationBuilder => { var sqlDataProviderCodeBuilder = new SqlDataProviderCodeBuilder(_dataProviderContext.ProviderName, codeGenerationBuilder); sqlDataProviderCodeBuilder.AddDataType(dataTypeDescriptor, storeDataScopesToCompile); sqlDataProviderCodeBuilder.AddExistingDataType(dataTypeDescriptor, storeDataScopesAlreadyCompiled); }, PopulateFieldsAction = types => { foreach (SqlDataTypeStoreDataScope storeDataScope in storeDataScopesToCompile) { string dataContextFieldName = NamesCreator.MakeDataContextFieldName(storeDataScope.TableName); string helperClassFullName = NamesCreator.MakeSqlDataProviderHelperClassFullName( dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName); Type helperClass = types.Single(f => f.FullName == helperClassFullName); string entityClassFullName = NamesCreator.MakeEntityClassFullName( dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName); Type entityClass = types.Single(f => f.FullName == entityClassFullName); var storeTableKey = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName); fields[storeTableKey] = new StoreTypeInfo(dataContextFieldName, entityClass, helperClass); } foreach (SqlDataTypeStoreDataScope storeDataScope in storeDataScopesAlreadyCompiled) { string dataContextFieldName = NamesCreator.MakeDataContextFieldName(storeDataScope.TableName); string helperClassFullName = NamesCreator.MakeSqlDataProviderHelperClassFullName( dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName); Type helperClass = TryGetGeneratedType(helperClassFullName); string entityClassFullName = NamesCreator.MakeEntityClassFullName( dataTypeDescriptor, storeDataScope.DataScopeName, storeDataScope.CultureName, _dataProviderContext.ProviderName); Type entityClass = TryGetGeneratedType(entityClassFullName); var storeTableKey = new SqlDataTypeStoreTableKey(storeDataScope.DataScopeName, storeDataScope.CultureName); fields[storeTableKey] = new StoreTypeInfo(dataContextFieldName, entityClass, helperClass); } } }); }
internal void BuildAllCode(CodeGenerationBuilder codeGenerationBuilder) { var codeBuilder = new SqlDataProviderCodeBuilder(_dataProviderContext.ProviderName, codeGenerationBuilder); foreach (InterfaceConfigurationElement element in _interfaceConfigurationElements) { if (element.DataTypeId == Guid.Empty) { continue; } var dataTypeDescriptor = DataMetaDataFacade.GetDataTypeDescriptor(element.DataTypeId); if (!dataTypeDescriptor.ValidateRuntimeType()) { Log.LogError(LogTitle, string.Format("The non code generated interface type '{0}' was not found, skipping code generation for that type", dataTypeDescriptor)); continue; } var sqlDataTypeStoreDataScopes = new List <SqlDataTypeStoreDataScope>(); foreach (StorageInformation storageInformation in element.Stores) { var sqlDataTypeStoreDataScope = new SqlDataTypeStoreDataScope { DataScopeName = storageInformation.DataScope, CultureName = storageInformation.CultureName, TableName = storageInformation.TableName }; sqlDataTypeStoreDataScopes.Add(sqlDataTypeStoreDataScope); } codeBuilder.AddDataType(dataTypeDescriptor, sqlDataTypeStoreDataScopes); } codeBuilder.AddDataContext(); }