public void RemoveDuplicateTphColumns() { int index1; for (int index2 = 0; index2 < this._columnMappings.Count - 1; index2 = index1) { StructuralType declaringType = this._columnMappings[index2].PropertyPath[0].DeclaringType; EdmProperty column = this._columnMappings[index2].ColumnProperty; index1 = index2 + 1; EdmType commonBaseType; while (index1 < this._columnMappings.Count && column.Name == this._columnMappings[index1].ColumnProperty.Name && (declaringType != this._columnMappings[index1].PropertyPath[0].DeclaringType && TypeSemantics.TryGetCommonBaseType((EdmType)declaringType, (EdmType)this._columnMappings[index1].PropertyPath[0].DeclaringType, out commonBaseType))) { ++index1; } System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration configuration1 = column.GetConfiguration() as System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration; for (int index3 = index2 + 1; index3 < index1; ++index3) { ColumnMappingBuilder toFixup = this._columnMappings[index3]; System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration configuration2 = toFixup.ColumnProperty.GetConfiguration() as System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive.PrimitivePropertyConfiguration; string errorMessage; if (configuration1 != null && !configuration1.IsCompatible(configuration2, false, out errorMessage)) { throw new MappingException(Strings.BadTphMappingToSharedColumn((object)string.Join(".", this._columnMappings[index2].PropertyPath.Select <EdmProperty, string>((Func <EdmProperty, string>)(p => p.Name))), (object)declaringType.Name, (object)string.Join(".", toFixup.PropertyPath.Select <EdmProperty, string>((Func <EdmProperty, string>)(p => p.Name))), (object)toFixup.PropertyPath[0].DeclaringType.Name, (object)column.Name, (object)column.DeclaringType.Name, (object)errorMessage)); } configuration2?.Configure(column, this._table, this._storeModel.ProviderManifest, false, false); column.Nullable = true; foreach (AssociationType associationType in this._storeModel.AssociationTypes.Where <AssociationType>((Func <AssociationType, bool>)(a => a.Constraint != null)).Select(a => new { a = a, p = a.Constraint.ToProperties }).Where(_param1 => { if (!_param1.p.Contains(column)) { return(_param1.p.Contains(toFixup.ColumnProperty)); } return(true); }).Select(_param0 => _param0.a).ToArray <AssociationType>()) { this._storeModel.RemoveAssociationType(associationType); } if (toFixup.ColumnProperty.DeclaringType.HasMember((EdmMember)toFixup.ColumnProperty)) { toFixup.ColumnProperty.DeclaringType.RemoveMember((EdmMember)toFixup.ColumnProperty); } toFixup.ColumnProperty = column; } } }
public void RemoveDuplicateTphColumns() { for (var i = 0; i < _columnMappings.Count - 1;) { var entityType = _columnMappings[i].PropertyPath[0].DeclaringType; var column = _columnMappings[i].ColumnProperty; var indexAfterLastDuplicate = i + 1; EdmType _; while (indexAfterLastDuplicate < _columnMappings.Count && column.Name == _columnMappings[indexAfterLastDuplicate].ColumnProperty.Name && entityType != _columnMappings[indexAfterLastDuplicate].PropertyPath[0].DeclaringType && TypeSemantics.TryGetCommonBaseType( entityType, _columnMappings[indexAfterLastDuplicate].PropertyPath[0].DeclaringType, out _)) { indexAfterLastDuplicate++; } var columnConfig = column.GetConfiguration() as PrimitivePropertyConfiguration; for (var toChangeIndex = i + 1; toChangeIndex < indexAfterLastDuplicate; toChangeIndex++) { var toFixup = _columnMappings[toChangeIndex]; var toChangeConfig = toFixup.ColumnProperty.GetConfiguration() as PrimitivePropertyConfiguration; string configError; if (columnConfig == null || columnConfig.IsCompatible(toChangeConfig, inCSpace: false, errorMessage: out configError)) { if (toChangeConfig != null) { if (columnConfig == null) { columnConfig = toChangeConfig; column.SetConfiguration(columnConfig); } else { columnConfig.FillFrom(toChangeConfig, inCSpace: false); } columnConfig.Configure(column); } } else { throw new MappingException( Strings.BadTphMappingToSharedColumn( string.Join(".", _columnMappings[i].PropertyPath.Select(p => p.Name)), entityType.Name, string.Join(".", toFixup.PropertyPath.Select(p => p.Name)), toFixup.PropertyPath[0].DeclaringType.Name, column.Name, column.DeclaringType.Name, configError)); } if (toFixup.ColumnProperty.DeclaringType.HasMember(toFixup.ColumnProperty)) { toFixup.ColumnProperty.DeclaringType.RemoveMember(toFixup.ColumnProperty); } toFixup.ColumnProperty = column; } i = indexAfterLastDuplicate; } }
public void RemoveDuplicateTphColumns() { for (var i = 0; i < _columnMappings.Count - 1;) { var entityType = _columnMappings[i].PropertyPath[0].DeclaringType; var column = _columnMappings[i].ColumnProperty; var indexAfterLastDuplicate = i + 1; EdmType _; while (indexAfterLastDuplicate < _columnMappings.Count && column.Name == _columnMappings[indexAfterLastDuplicate].ColumnProperty.Name && entityType != _columnMappings[indexAfterLastDuplicate].PropertyPath[0].DeclaringType && TypeSemantics.TryGetCommonBaseType( entityType, _columnMappings[indexAfterLastDuplicate].PropertyPath[0].DeclaringType, out _)) { indexAfterLastDuplicate++; } var columnConfig = column.GetConfiguration() as Properties.Primitive.PrimitivePropertyConfiguration; for (var toChangeIndex = i + 1; toChangeIndex < indexAfterLastDuplicate; toChangeIndex++) { var toFixup = _columnMappings[toChangeIndex]; var toChangeConfig = toFixup.ColumnProperty.GetConfiguration() as Properties.Primitive.PrimitivePropertyConfiguration; string configError; if (columnConfig == null || columnConfig.IsCompatible(toChangeConfig, inCSpace: false, errorMessage: out configError)) { if (toChangeConfig != null) { toChangeConfig.Configure(column, _table, _storeModel.ProviderManifest); } } else { throw new MappingException( Strings.BadTphMappingToSharedColumn( string.Join(".", _columnMappings[i].PropertyPath.Select(p => p.Name)), entityType.Name, string.Join(".", toFixup.PropertyPath.Select(p => p.Name)), toFixup.PropertyPath[0].DeclaringType.Name, column.Name, column.DeclaringType.Name, configError)); } column.Nullable = true; var associations = from a in _storeModel.AssociationTypes where a.Constraint != null let p = a.Constraint.ToProperties where p.Contains(column) || p.Contains(toFixup.ColumnProperty) select a; foreach (var association in associations.ToArray()) { _storeModel.RemoveAssociationType(association); } if (toFixup.ColumnProperty.DeclaringType.HasMember(toFixup.ColumnProperty)) { toFixup.ColumnProperty.DeclaringType.RemoveMember(toFixup.ColumnProperty); } toFixup.ColumnProperty = column; } i = indexAfterLastDuplicate; } }