예제 #1
0
            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
            }
예제 #2
0
            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);
                    }
                }
            }
예제 #3
0
        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);
                }
            }
        }