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)); } }
// 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(); }
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); } }
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(); }
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)); } } }