/// <inheritdoc cref="IChildImportEntitiesGetter"/> public virtual IEnumerable <Entity> Get(ImportParameters parameters) { List <Entity> entities = new List <Entity>(); foreach (ImportEntity importEntity in parameters.Entities) { if (importEntity.PrimaryEntity == null) { continue; } SchemasKeyColumnsValues schemasKeyColumnsValues = GetSchemasKeyColumnsValues(parameters, importEntity); AddChildEntitiesQueryFilters(parameters, importEntity, schemasKeyColumnsValues); foreach (EntitySchemaQuery esq in ChildEntitiesQueries.Values) { if (esq.Filters.Count >= FileImporterConstants.MaxQueryChildFiltersCount) { EntityCollection entityCollection = esq.GetEntityCollection(UserConnection); entities.AddRange(entityCollection); esq.ResetSelectQuery(); esq.Filters.Clear(); } } } foreach (EntitySchemaQuery esq in ChildEntitiesQueries.Values) { if (esq.Filters.Any()) { EntityCollection entityCollection = esq.GetEntityCollection(UserConnection); entities.AddRange(entityCollection); } } return(entities); }
/// <summary> /// Gets schemas key columns values. /// </summary> /// <param name="parameters">Import parameters.</param> /// <param name="importEntity">Import entity.</param> /// <returns>Schemas key columns values.</returns> private SchemasKeyColumnsValues GetSchemasKeyColumnsValues( ImportParameters parameters, ImportEntity importEntity) { var schemasKeyColumnsValues = new SchemasKeyColumnsValues(); foreach (ImportColumn column in parameters.Columns) { ImportColumnValue columnValue = importEntity.FindColumnValue(column); if (columnValue == null) { continue; } foreach (ImportColumnDestination destination in column.Destinations) { Guid schemaUId = destination.SchemaUId; if (schemaUId.Equals(parameters.RootSchemaUId)) { continue; } object valueForSave = ColumnsProcessor.FindValueForSave(destination, columnValue); if (valueForSave == null) { continue; } EntitySchema schema = UserConnection.EntitySchemaManager.GetInstanceByUId(schemaUId); EntitiesKeyColumnsValues entitiesKeyColumnsValues; if (!schemasKeyColumnsValues.TryGetValue(schema, out entitiesKeyColumnsValues)) { entitiesKeyColumnsValues = new EntitiesKeyColumnsValues(); schemasKeyColumnsValues.Add(schema, entitiesKeyColumnsValues); } int destinationIndex = destination.GetIndex(); object attributeColumnValue = destination.FindAttributeColumnValue(); string destinationKey = string.Concat(destinationIndex, attributeColumnValue); KeyColumnsValues keyColumnsValues; if (!entitiesKeyColumnsValues.TryGetValue(destinationKey, out keyColumnsValues)) { keyColumnsValues = new KeyColumnsValues(); entitiesKeyColumnsValues.Add(destinationKey, keyColumnsValues); } keyColumnsValues.Add(destination.ColumnName, valueForSave); string attributeColumnName = GetDestinationAttributeColumnName(destination, schema); if (!keyColumnsValues.ContainsKey(attributeColumnName)) { keyColumnsValues.Add(attributeColumnName, attributeColumnValue); } EntitySchemaColumn connectionColumn = importEntity.GetReferenceColumn(schema); string connectionColumnName = connectionColumn.Name; if (!keyColumnsValues.ContainsKey(connectionColumnName)) { Guid primaryColumnValue = importEntity.PrimaryEntity.PrimaryColumnValue; keyColumnsValues.Add(connectionColumnName, primaryColumnValue); } } } return(schemasKeyColumnsValues); }
/// <summary> /// Adds child entities query filters. /// </summary> /// <param name="parameters">Import parameters.</param> /// <param name="importEntity">Import entity.</param> /// <param name="schemasKeyColumnsValues">Schemas key columns values.</param> private void AddChildEntitiesQueryFilters(ImportParameters parameters, ImportEntity importEntity, SchemasKeyColumnsValues schemasKeyColumnsValues) { foreach (var schemaKeyColumnsValues in schemasKeyColumnsValues) { EntitySchema schema = schemaKeyColumnsValues.Key; EntitySchemaQuery esq; if (!ChildEntitiesQueries.TryGetValue(schema, out esq)) { esq = CreateEntitiesSearchQuery(schema); ChildEntitiesQueries.Add(schema, esq); } foreach (var entitiesKeyColumnsValues in schemaKeyColumnsValues.Value) { Dictionary <string, object> keyColumnsValues = entitiesKeyColumnsValues.Value; EntitySchemaQueryFilterCollection filters = CreateChildEntityFilters(esq, importEntity, keyColumnsValues); esq.Filters.Add(filters); } } }