private Vertex[] ConvertMappingConditionsToVertices( ConversionContext <DomainConstraint <string, ValueCondition> > converter, DomainVariable <string, ValueCondition>[] variables) { Vertex[] vertexArray = new Vertex[this.NormalizedEntityTypeMappings.Count]; for (int index1 = 0; index1 < vertexArray.Length; ++index1) { FunctionImportNormalizedEntityTypeMapping entityTypeMapping = this.NormalizedEntityTypeMappings[index1]; Vertex left = Vertex.One; for (int index2 = 0; index2 < this.DiscriminatorColumns.Count; ++index2) { FunctionImportEntityTypeMappingCondition columnCondition = entityTypeMapping.ColumnConditions[index2]; if (columnCondition != null) { ValueCondition conditionValue = columnCondition.ConditionValue; if (conditionValue.IsNotNullCondition) { TermExpr <DomainConstraint <string, ValueCondition> > term = new TermExpr <DomainConstraint <string, ValueCondition> >(new DomainConstraint <string, ValueCondition>(variables[index2], ValueCondition.IsNull)); Vertex vertex = converter.TranslateTermToVertex(term); left = converter.Solver.And(left, converter.Solver.Not(vertex)); } else { TermExpr <DomainConstraint <string, ValueCondition> > term = new TermExpr <DomainConstraint <string, ValueCondition> >(new DomainConstraint <string, ValueCondition>(variables[index2], conditionValue)); left = converter.Solver.And(left, converter.TranslateTermToVertex(term)); } } } vertexArray[index1] = left; } return(vertexArray); }
private DomainVariable <string, ValueCondition>[] ConstructDomainVariables() { Set <ValueCondition>[] setArray = new Set <ValueCondition> [this.DiscriminatorColumns.Count]; for (int index = 0; index < setArray.Length; ++index) { setArray[index] = new Set <ValueCondition>(); setArray[index].Add(ValueCondition.IsOther); setArray[index].Add(ValueCondition.IsNull); } foreach (FunctionImportNormalizedEntityTypeMapping entityTypeMapping in this.NormalizedEntityTypeMappings) { for (int index = 0; index < this.DiscriminatorColumns.Count; ++index) { FunctionImportEntityTypeMappingCondition columnCondition = entityTypeMapping.ColumnConditions[index]; if (columnCondition != null && !columnCondition.ConditionValue.IsNotNullCondition) { setArray[index].Add(columnCondition.ConditionValue); } } } DomainVariable <string, ValueCondition>[] domainVariableArray = new DomainVariable <string, ValueCondition> [setArray.Length]; for (int index = 0; index < domainVariableArray.Length; ++index) { domainVariableArray[index] = new DomainVariable <string, ValueCondition>(this.DiscriminatorColumns[index], setArray[index].MakeReadOnly()); } return(domainVariableArray); }
private bool TryConvertToEntityTypeConditionsAndPropertyMappings( EdmFunction functionImport, FunctionImportStructuralTypeMappingKB functionImportKB, int typeID, RowType cTypeTvfElementType, RowType sTypeTvfElementType, IXmlLineInfo navLineInfo, out List <ConditionPropertyMapping> typeConditions, out List <PropertyMapping> propertyMappings) { System.Data.Entity.Core.Metadata.Edm.EntityType mappedEntityType = functionImportKB.MappedEntityTypes[typeID]; typeConditions = new List <ConditionPropertyMapping>(); bool flag = false; foreach (FunctionImportNormalizedEntityTypeMapping entityTypeMapping in functionImportKB.NormalizedEntityTypeMappings.Where <FunctionImportNormalizedEntityTypeMapping>((Func <FunctionImportNormalizedEntityTypeMapping, bool>)(f => f.ImpliedEntityTypes[typeID]))) { foreach (FunctionImportEntityTypeMappingCondition mappingCondition in entityTypeMapping.ColumnConditions.Where <FunctionImportEntityTypeMappingCondition>((Func <FunctionImportEntityTypeMappingCondition, bool>)(c => c != null))) { FunctionImportEntityTypeMappingCondition condition = mappingCondition; EdmProperty column; if (sTypeTvfElementType.Properties.TryGetValue(condition.ColumnName, false, out column)) { object obj; bool? nullable; if (condition.ConditionValue.IsSentinel) { obj = (object)null; nullable = condition.ConditionValue != ValueCondition.IsNull ? new bool?(false) : new bool?(true); } else { PrimitiveType edmType = (PrimitiveType)cTypeTvfElementType.Properties[column.Name].TypeUsage.EdmType; obj = ((FunctionImportEntityTypeMappingConditionValue)condition).GetConditionValue(edmType.ClrEquivalentType, (Action)(() => FunctionImportMappingComposableHelper.AddToSchemaErrorWithMemberAndStructure(new Func <object, object, string>(Strings.Mapping_InvalidContent_ConditionMapping_InvalidPrimitiveTypeKind), column.Name, column.TypeUsage.EdmType.FullName, MappingErrorCode.ConditionError, this.m_sourceLocation, (IXmlLineInfo)condition.LineInfo, (IList <EdmSchemaError>) this.m_parsingErrors)), (Action)(() => FunctionImportMappingComposableHelper.AddToSchemaErrors(Strings.Mapping_ConditionValueTypeMismatch, MappingErrorCode.ConditionError, this.m_sourceLocation, (IXmlLineInfo)condition.LineInfo, (IList <EdmSchemaError>) this.m_parsingErrors))); if (obj == null) { flag = true; continue; } nullable = new bool?(); } typeConditions.Add(obj != null ? (ConditionPropertyMapping) new ValueConditionMapping(column, obj) : (ConditionPropertyMapping) new IsNullConditionMapping(column, nullable.Value)); } else { FunctionImportMappingComposableHelper.AddToSchemaErrorsWithMemberInfo(new Func <object, string>(Strings.Mapping_InvalidContent_Column), condition.ColumnName, MappingErrorCode.InvalidStorageMember, this.m_sourceLocation, (IXmlLineInfo)condition.LineInfo, (IList <EdmSchemaError>) this.m_parsingErrors); } } } return(!(flag | !this.TryConvertToPropertyMappings((StructuralType)mappedEntityType, cTypeTvfElementType, sTypeTvfElementType, functionImport, functionImportKB, navLineInfo, out propertyMappings))); }
private void WriteFunctionImportConditionElement(FunctionImportEntityTypeMappingCondition condition) { DebugCheck.NotNull(condition); _xmlWriter.WriteStartElement(MslConstructs.ConditionElement); _xmlWriter.WriteAttributeString(MslConstructs.ConditionColumnNameAttribute, condition.ColumnName); var isNullCondition = condition as FunctionImportEntityTypeMappingConditionIsNull; if (isNullCondition != null) { WriteIsNullConditionAttribute(isNullCondition.IsNull); } else { Debug.Assert(condition is FunctionImportEntityTypeMappingConditionValue, "Unexpected condition type"); WriteConditionValue(((FunctionImportEntityTypeMappingConditionValue)condition).Value); } _xmlWriter.WriteEndElement(); }