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);
 }
Beispiel #3
0
        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();
        }