Exemple #1
0
        internal void SetParameterValue(
            PropagatorResult result,
            ModificationFunctionParameterBinding parameterBinding,
            UpdateTranslator translator)
        {
            DbParameter parameter      = this._dbCommand.Parameters[parameterBinding.Parameter.Name];
            TypeUsage   typeUsage      = parameterBinding.Parameter.TypeUsage;
            object      principalValue = translator.KeyManager.GetPrincipalValue(result);

            translator.SetParameterValue(parameter, typeUsage, principalValue);
            int identifier = result.Identifier;

            if (-1 == identifier)
            {
                return;
            }
            if (this._inputIdentifiers == null)
            {
                this._inputIdentifiers = new List <KeyValuePair <int, DbParameter> >(2);
            }
            foreach (int principal in translator.KeyManager.GetPrincipals(identifier))
            {
                this._inputIdentifiers.Add(new KeyValuePair <int, DbParameter>(principal, parameter));
            }
        }
Exemple #2
0
        // Adds and register a DbParameter to the current command.
        internal void SetParameterValue(
            PropagatorResult result,
            ModificationFunctionParameterBinding parameterBinding, UpdateTranslator translator)
        {
            // retrieve DbParameter
            var parameter      = _dbCommand.Parameters[parameterBinding.Parameter.Name];
            var parameterType  = parameterBinding.Parameter.TypeUsage;
            var parameterValue = translator.KeyManager.GetPrincipalValue(result);

            translator.SetParameterValue(parameter, parameterType, parameterValue);

            // if the parameter corresponds to an identifier (key component), remember this fact in case
            // it's important for dependency ordering (e.g., output the identifier before creating it)
            var identifier = result.Identifier;

            if (PropagatorResult.NullIdentifier != identifier)
            {
                const int initialSize = 2; // expect on average less than two input identifiers per command
                if (null == _inputIdentifiers)
                {
                    _inputIdentifiers = new List <KeyValuePair <int, DbParameter> >(initialSize);
                }
                foreach (var principal in translator.KeyManager.GetPrincipals(identifier))
                {
                    _inputIdentifiers.Add(new KeyValuePair <int, DbParameter>(principal, parameter));
                }
            }
        }
 private void WriteScalarParameterElement(
     EdmMember member,
     ModificationFunctionParameterBinding parameterBinding)
 {
     this._xmlWriter.WriteStartElement("ScalarProperty");
     this._xmlWriter.WriteAttributeString("Name", member.Name);
     this._xmlWriter.WriteAttributeString("ParameterName", parameterBinding.Parameter.Name);
     this._xmlWriter.WriteAttributeString("Version", parameterBinding.IsCurrent ? "Current" : "Original");
     this._xmlWriter.WriteEndElement();
 }
Exemple #4
0
 private void ConfigureParameters(
     ModificationFunctionMapping modificationStoredProcedureMapping)
 {
     foreach (KeyValuePair <ModificationStoredProcedureConfiguration.ParameterKey, Tuple <string, string> > parameterName in this._parameterNames)
     {
         PropertyPath propertyPath = parameterName.Key.PropertyPath;
         string       str1         = parameterName.Value.Item1;
         string       str2         = parameterName.Value.Item2;
         List <ModificationFunctionParameterBinding> list = modificationStoredProcedureMapping.ParameterBindings.Where <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb =>
         {
             if ((pb.MemberPath.AssociationSetEnd == null || pb.MemberPath.AssociationSetEnd.ParentAssociationSet.ElementType.IsManyToMany()) && propertyPath.Equals(new PropertyPath(pb.MemberPath.Members.OfType <EdmProperty>().Select <EdmProperty, PropertyInfo>((Func <EdmProperty, PropertyInfo>)(m => m.GetClrPropertyInfo())))))
             {
                 return(true);
             }
             if (propertyPath.Count == 2 && pb.MemberPath.AssociationSetEnd != null && pb.MemberPath.Members.First <EdmMember>().GetClrPropertyInfo().IsSameAs(propertyPath.Last <PropertyInfo>()))
             {
                 return(pb.MemberPath.AssociationSetEnd.ParentAssociationSet.AssociationSetEnds.Select <AssociationSetEnd, PropertyInfo>((Func <AssociationSetEnd, PropertyInfo>)(ae => ae.CorrespondingAssociationEndMember.GetClrPropertyInfo())).Where <PropertyInfo>((Func <PropertyInfo, bool>)(pi => pi != (PropertyInfo)null)).Any <PropertyInfo>((Func <PropertyInfo, bool>)(pi => pi.IsSameAs(propertyPath.First <PropertyInfo>()))));
             }
             return(false);
         })).ToList <ModificationFunctionParameterBinding>();
         if (list.Count == 1)
         {
             ModificationFunctionParameterBinding parameterBinding = list.Single <ModificationFunctionParameterBinding>();
             if (!string.IsNullOrWhiteSpace(str2) && parameterBinding.IsCurrent)
             {
                 throw Error.ModificationFunctionParameterNotFoundOriginal((object)propertyPath, (object)modificationStoredProcedureMapping.Function.FunctionName);
             }
             parameterBinding.Parameter.Name = str1;
             this._configuredParameters.Add(parameterBinding.Parameter);
         }
         else
         {
             if (list.Count != 2)
             {
                 throw Error.ModificationFunctionParameterNotFound((object)propertyPath, (object)modificationStoredProcedureMapping.Function.FunctionName);
             }
             ModificationFunctionParameterBinding parameterBinding1 = list.Select <ModificationFunctionParameterBinding, bool>((Func <ModificationFunctionParameterBinding, bool>)(pb => pb.IsCurrent)).Distinct <bool>().Count <bool>() != 1 || !list.All <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb => pb.MemberPath.AssociationSetEnd != null)) ? list.Single <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb => pb.IsCurrent)) : (!parameterName.Key.IsRightKey ? list.First <ModificationFunctionParameterBinding>() : list.Last <ModificationFunctionParameterBinding>());
             parameterBinding1.Parameter.Name = str1;
             this._configuredParameters.Add(parameterBinding1.Parameter);
             if (!string.IsNullOrWhiteSpace(str2))
             {
                 ModificationFunctionParameterBinding parameterBinding2 = list.Single <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb => !pb.IsCurrent));
                 parameterBinding2.Parameter.Name = str2;
                 this._configuredParameters.Add(parameterBinding2.Parameter);
             }
         }
     }
     foreach (FunctionParameter functionParameter in modificationStoredProcedureMapping.Function.Parameters.Except <FunctionParameter>((IEnumerable <FunctionParameter>) this._configuredParameters))
     {
         functionParameter.Name = ((IEnumerable <INamedDataModelItem>)modificationStoredProcedureMapping.Function.Parameters.Except <FunctionParameter>((IEnumerable <FunctionParameter>) new FunctionParameter[1]
         {
             functionParameter
         })).UniquifyName(functionParameter.Name);
     }
 }
Exemple #5
0
        private void WriteScalarParameterElement(EdmMember member, ModificationFunctionParameterBinding parameterBinding)
        {
            DebugCheck.NotNull(member);
            DebugCheck.NotNull(parameterBinding);

            _xmlWriter.WriteStartElement(MslConstructs.ScalarPropertyElement);
            _xmlWriter.WriteAttributeString(MslConstructs.ScalarPropertyNameAttribute, member.Name);
            _xmlWriter.WriteAttributeString(MslConstructs.ParameterNameAttribute, parameterBinding.Parameter.Name);
            _xmlWriter.WriteAttributeString(
                MslConstructs.ParameterVersionAttribute,
                parameterBinding.IsCurrent
                    ? MslConstructs.ParameterVersionAttributeCurrentValue
                    : MslConstructs.ParameterVersionAttributeOriginalValue);
            _xmlWriter.WriteEndElement();
        }
Exemple #6
0
        private Tuple <FunctionParameter, bool> GetParameter(
            EdmProperty column,
            bool originalValue = false)
        {
            // ISSUE: object of a compiler-generated type is created
            // ISSUE: variable of a compiler-generated type
            DynamicToFunctionModificationCommandConverter.\u003C\u003Ec__DisplayClass54 cDisplayClass54_1 = new DynamicToFunctionModificationCommandConverter.\u003C\u003Ec__DisplayClass54()
            {
                column = column
            };
            // ISSUE: reference to a compiler-generated field
            // ISSUE: reference to a compiler-generated method
            cDisplayClass54_1.columnMappings = this._entityContainerMapping.EntitySetMappings.SelectMany((Func <EntitySetMapping, IEnumerable <EntityTypeMapping> >)(esm => (IEnumerable <EntityTypeMapping>)esm.EntityTypeMappings), (esm, etm) => new
            {
                esm = esm,
                etm = etm
            }).SelectMany(_param0 => (IEnumerable <MappingFragment>)_param0.etm.MappingFragments, (_param0, mf) => new
            {
                \u003C\u003Eh__TransparentIdentifier22 = _param0,
                mf = mf
            }).SelectMany(_param0 => _param0.mf.FlattenedProperties, (_param0, cm) => new
            {
                \u003C\u003Eh__TransparentIdentifier23 = _param0,
                cm = cm
            }).Where(new Func <\u003C\u003Ef__AnonymousType8 <\u003C\u003Ef__AnonymousType7 <\u003C\u003Ef__AnonymousType1 <EntitySetMapping, EntityTypeMapping>, MappingFragment>, ColumnMappingBuilder>, bool>(cDisplayClass54_1.\u003CGetParameter\u003Eb__2f)).Select(_param0 => _param0.cm).ToList <ColumnMappingBuilder>();
            // ISSUE: reference to a compiler-generated method
            List <ModificationFunctionParameterBinding> list = this._currentFunctionMapping.ParameterBindings.Where <ModificationFunctionParameterBinding>(new Func <ModificationFunctionParameterBinding, bool>(cDisplayClass54_1.\u003CGetParameter\u003Eb__31)).ToList <ModificationFunctionParameterBinding>();

            if (!list.Any <ModificationFunctionParameterBinding>())
            {
                // ISSUE: reference to a compiler-generated method
                List <EdmMember[]> iaColumnMappings = this._entityContainerMapping.AssociationSetMappings.SelectMany((Func <AssociationSetMapping, IEnumerable <TypeMapping> >)(asm => asm.TypeMappings), (asm, tm) => new
                {
                    asm = asm,
                    tm  = tm
                }).SelectMany(_param0 => (IEnumerable <MappingFragment>)_param0.tm.MappingFragments, (_param0, mf) => new
                {
                    \u003C\u003Eh__TransparentIdentifier25 = _param0,
                    mf = mf
                }).SelectMany(_param0 => _param0.mf.PropertyMappings.OfType <EndPropertyMapping>(), (_param0, epm) => new
                {
                    \u003C\u003Eh__TransparentIdentifier26 = _param0,
                    epm = epm
                }).SelectMany(_param0 => (IEnumerable <ScalarPropertyMapping>)_param0.epm.PropertyMappings, (_param0, pm) => new
                {
                    \u003C\u003Eh__TransparentIdentifier27 = _param0,
                    pm = pm
                }).Where(new Func <\u003C\u003Ef__AnonymousTypec <\u003C\u003Ef__AnonymousTypeb <\u003C\u003Ef__AnonymousTypea <\u003C\u003Ef__AnonymousType9 <AssociationSetMapping, TypeMapping>, MappingFragment>, EndPropertyMapping>, ScalarPropertyMapping>, bool>(cDisplayClass54_1.\u003CGetParameter\u003Eb__3b)).Select(_param0 => new EdmMember[2]
                {
                    (EdmMember)_param0.pm.Property,
                    (EdmMember)_param0.\u003C\u003Eh__TransparentIdentifier27.epm.AssociationEnd
                }).ToList <EdmMember[]>();
                list = this._currentFunctionMapping.ParameterBindings.Where <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb =>
                {
                    // ISSUE: variable of a compiler-generated type
                    DynamicToFunctionModificationCommandConverter.\u003C\u003Ec__DisplayClass54 cDisplayClass54 = cDisplayClass54_1;
                    ModificationFunctionParameterBinding pb1 = pb;
                    return(iaColumnMappings.Any <EdmMember[]>((Func <EdmMember[], bool>)(epm => pb1.MemberPath.Members.SequenceEqual <EdmMember>((IEnumerable <EdmMember>)epm))));
                })).ToList <ModificationFunctionParameterBinding>();
            }
            // ISSUE: reference to a compiler-generated field
            if (list.Count == 0 && cDisplayClass54_1.column.IsPrimaryKeyColumn)
            {
                // ISSUE: reference to a compiler-generated field
                return(Tuple.Create <FunctionParameter, bool>(new FunctionParameter(this._storeGeneratedKeys[this._nextStoreGeneratedKey++].Name, cDisplayClass54_1.column.TypeUsage, ParameterMode.In), true));
            }
            if (list.Count == 1)
            {
                return(Tuple.Create <FunctionParameter, bool>(list[0].Parameter, list[0].IsCurrent));
            }
            if (list.Count == 0)
            {
                return((Tuple <FunctionParameter, bool>)null);
            }
            ModificationFunctionParameterBinding parameterBinding = originalValue ? list.Single <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb => !pb.IsCurrent)) : list.Single <ModificationFunctionParameterBinding>((Func <ModificationFunctionParameterBinding, bool>)(pb => pb.IsCurrent));

            return(Tuple.Create <FunctionParameter, bool>(parameterBinding.Parameter, parameterBinding.IsCurrent));
        }
        // Adds and register a DbParameter to the current command.
        internal void SetParameterValue(
            PropagatorResult result,
            ModificationFunctionParameterBinding parameterBinding, UpdateTranslator translator)
        {
            // retrieve DbParameter
            var parameter = _dbCommand.Parameters[parameterBinding.Parameter.Name];
            var parameterType = parameterBinding.Parameter.TypeUsage;
            var parameterValue = translator.KeyManager.GetPrincipalValue(result);
            translator.SetParameterValue(parameter, parameterType, parameterValue);

            // if the parameter corresponds to an identifier (key component), remember this fact in case
            // it's important for dependency ordering (e.g., output the identifier before creating it)
            var identifier = result.Identifier;
            if (PropagatorResult.NullIdentifier != identifier)
            {
                const int initialSize = 2; // expect on average less than two input identifiers per command
                if (null == _inputIdentifiers)
                {
                    _inputIdentifiers = new List<KeyValuePair<int, DbParameter>>(initialSize);
                }
                foreach (var principal in translator.KeyManager.GetPrincipals(identifier))
                {
                    _inputIdentifiers.Add(new KeyValuePair<int, DbParameter>(principal, parameter));
                }
            }
        }