public TableData(DataContext context, DataTypeMappingElement mappingConfig) { TableName = mappingConfig.TableName; ObjectType = mappingConfig.ObjectType; DataTable schemaTable = context.SchemaTables[mappingConfig]; if (!string.IsNullOrEmpty(mappingConfig.IDColumn)) { DataRow idColumnRow = schemaTable.Select(string.Format(COLUMN_NAME_FILTER, mappingConfig.IDColumn)).FirstOrDefault(); if (idColumnRow != null) { KeyColumn = mappingConfig.IDColumn; } } else { KeyColumn = Constants.DEFAULT_ID_COLUMN; } CacheData = mappingConfig.CacheData; schemaTable.Rows.Cast <DataRow>().ToList().ForEach(columnDataRow => { string columnName = columnDataRow[COLUMN_NAME_COL].ToString(); PropertyMappingElement columnPropMapping = mappingConfig.PropertyMappings.FirstOrDefault(propMapping => string.Compare(propMapping.ColumnName, columnName, true) == 0); if (columnPropMapping != null) { PropertyInfo propInfo = mappingConfig.ObjectType.GetProperty(columnPropMapping.PropertyName); if (propInfo != null) { ColumnMappings.Add(columnName, propInfo); } } else { string columNameWithoutUnderscores = columnName.Replace("_", ""); PropertyInfo propInfo = mappingConfig.ObjectType.GetProperties().FirstOrDefault(propMatch => string.Compare(propMatch.Name, columNameWithoutUnderscores, true) == 0); if (propInfo != null) { ColumnMappings.Add(columnName, propInfo); } } }); MapChildTables(context, mappingConfig); // TODO: throw invalid column mapping exceptions here }
private void MapChildTables(DataContext context, DataTypeMappingElement mappingConfig) { foreach (ChildDataTypeMappingElement childMapping in mappingConfig.ChildTableMappings) { if (context.SchemaTables.ContainsKey(childMapping)) { TableData childTable = new TableData(context, childMapping); TableAssociation tableAssociation = new TableAssociation( !string.IsNullOrEmpty(childMapping.LinkedColumnOnParent) ? childMapping.LinkedColumnOnParent : Constants.DEFAULT_ID_COLUMN, !string.IsNullOrEmpty(childMapping.LinkedPropertyOnParent) ? childMapping.LinkedPropertyOnParent : childMapping.ObjectTypeName, this, !string.IsNullOrEmpty(childMapping.LinkedColumnOnChild) ? childMapping.LinkedColumnOnChild : Constants.DEFAULT_ID_COLUMN, !string.IsNullOrEmpty(childMapping.LinkedPropertyOnChild) ? childMapping.LinkedPropertyOnChild : mappingConfig.ObjectTypeName, childTable); LinkedTables.Add(tableAssociation); } } }
private void AddChildTypeMappings(List <DataTypeMappingElement> typeMappings, DataTypeMappingElement mappingElement) { if (mappingElement != null && mappingElement.ChildTableMappings != null) { foreach (ChildDataTypeMappingElement childTypeMapping in mappingElement.ChildTableMappings.Where(typeMapping => !Tables.ContainsKey(typeMapping.ObjectType))) { typeMappings.Add(childTypeMapping); AddChildTypeMappings(typeMappings, childTypeMapping); } } }