private void SerializePromotedProperties(SqlParameterCollection parameters, StringBuilder commandTextBuilder, SaveWorkflowCommand saveWorkflowCommand) { int num = 0; foreach (KeyValuePair <string, Tuple <List <XName>, List <XName> > > pair in base.Store.Promotions) { StringBuilder builder = new StringBuilder(0x200); int num2 = 1; bool flag = false; string str = string.Format(CultureInfo.InvariantCulture, "@promotionName{0}", new object[] { num }); string str2 = string.Format(CultureInfo.InvariantCulture, "@instanceId{0}", new object[] { num }); builder.Append(string.Format(CultureInfo.InvariantCulture, "exec {0}.[InsertPromotedProperties] ", new object[] { "[System.Activities.DurableInstancing]" })); builder.Append("@promotionName="); builder.Append(str); builder.Append(","); builder.Append("@instanceId="); builder.Append(str2); foreach (XName name in pair.Value.Item1) { InstanceValue value2; if (saveWorkflowCommand.InstanceData.TryGetValue(name, out value2)) { if (!SerializationUtilities.IsPropertyTypeSqlVariantCompatible(value2)) { throw FxTrace.Exception.AsError(new InstancePersistenceException(System.Activities.DurableInstancing.SR.CannotPromoteAsSqlVariant(value2.Value.GetType().ToString(), name.ToString()))); } string str3 = string.Format(CultureInfo.InvariantCulture, "@value{0}=", new object[] { num2 }); string str4 = string.Format(CultureInfo.InvariantCulture, "@value{0}_promotion{1}", new object[] { num2, num }); SqlParameter parameter = new SqlParameter { SqlDbType = SqlDbType.Variant, ParameterName = str4, Value = value2.Value ?? DBNull.Value }; parameters.Add(parameter); builder.Append(", "); builder.Append(str3); builder.Append(str4); flag = true; } num2++; } num2 = 0x21; foreach (XName name2 in pair.Value.Item2) { InstanceValue value3; IObjectSerializer objectSerializer = ObjectSerializerFactory.GetObjectSerializer(base.Store.InstanceEncodingOption); if (saveWorkflowCommand.InstanceData.TryGetValue(name2, out value3)) { string str5 = string.Format(CultureInfo.InvariantCulture, "@value{0}=", new object[] { num2 }); string parameterName = string.Format(CultureInfo.InvariantCulture, "@value{0}_promotion{1}", new object[] { num2, num }); AddSerializedProperty(objectSerializer.SerializeValue(value3.Value), parameters, parameterName); builder.Append(", "); builder.Append(str5); builder.Append(parameterName); flag = true; } num2++; } if (flag) { SqlParameter parameter2 = new SqlParameter { SqlDbType = SqlDbType.NVarChar, Size = 400, ParameterName = str, Value = pair.Key }; parameters.Add(parameter2); SqlParameter parameter3 = new SqlParameter { SqlDbType = SqlDbType.UniqueIdentifier, ParameterName = str2, Value = base.InstancePersistenceContext.InstanceView.InstanceId }; parameters.Add(parameter3); builder.Append(";"); commandTextBuilder.AppendLine(builder.ToString()); num++; } } }
void SerializePromotedProperties(SqlParameterCollection parameters, StringBuilder commandTextBuilder, SaveWorkflowCommand saveWorkflowCommand) { const int SqlVariantStartColumn = 1; const string promotionNameParameter = "@promotionName="; const string instanceIdParameter = "@instanceId="; int promotionNumber = 0; foreach (KeyValuePair <string, Tuple <List <XName>, List <XName> > > promotion in base.Store.Promotions) { StringBuilder storedProcInvocationBuilder = new StringBuilder(SqlWorkflowInstanceStoreConstants.DefaultStringBuilderCapacity); int column = SqlVariantStartColumn; bool addPromotion = false; string promotionNameArgument = string.Format(CultureInfo.InvariantCulture, "@promotionName{0}", promotionNumber); string instanceIdArgument = string.Format(CultureInfo.InvariantCulture, "@instanceId{0}", promotionNumber); storedProcInvocationBuilder.Append(string.Format(CultureInfo.InvariantCulture, "exec {0}.[InsertPromotedProperties] ", SqlWorkflowInstanceStoreConstants.DefaultSchema)); storedProcInvocationBuilder.Append(promotionNameParameter); storedProcInvocationBuilder.Append(promotionNameArgument); storedProcInvocationBuilder.Append(","); storedProcInvocationBuilder.Append(instanceIdParameter); storedProcInvocationBuilder.Append(instanceIdArgument); foreach (XName name in promotion.Value.Item1) { InstanceValue propertyValue; if (saveWorkflowCommand.InstanceData.TryGetValue(name, out propertyValue)) { if (!SerializationUtilities.IsPropertyTypeSqlVariantCompatible(propertyValue)) { throw FxTrace.Exception.AsError(new InstancePersistenceException(SR.CannotPromoteAsSqlVariant(propertyValue.Value.GetType().ToString(), name.ToString()))); } string parameterName = string.Format(CultureInfo.InvariantCulture, "@value{0}=", column); string argumentName = string.Format(CultureInfo.InvariantCulture, "@value{0}_promotion{1}", column, promotionNumber); parameters.Add(new SqlParameter() { SqlDbType = SqlDbType.Variant, ParameterName = argumentName, Value = propertyValue.Value ?? DBNull.Value }); storedProcInvocationBuilder.Append(", "); storedProcInvocationBuilder.Append(parameterName); storedProcInvocationBuilder.Append(argumentName); addPromotion = true; } column++; } column = SqlVariantStartColumn + SqlWorkflowInstanceStoreConstants.MaximumPropertiesPerPromotion; foreach (XName name in promotion.Value.Item2) { InstanceValue propertyValue; IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(base.Store.InstanceEncodingOption); if (saveWorkflowCommand.InstanceData.TryGetValue(name, out propertyValue)) { string parameterName = string.Format(CultureInfo.InvariantCulture, "@value{0}=", column); string argumentName = string.Format(CultureInfo.InvariantCulture, "@value{0}_promotion{1}", column, promotionNumber); SaveWorkflowAsyncResult.AddSerializedProperty(serializer.SerializeValue(propertyValue.Value), parameters, argumentName); storedProcInvocationBuilder.Append(", "); storedProcInvocationBuilder.Append(parameterName); storedProcInvocationBuilder.Append(argumentName); addPromotion = true; } column++; } if (addPromotion) { parameters.Add(new SqlParameter() { SqlDbType = SqlDbType.NVarChar, Size = 400, ParameterName = promotionNameArgument, Value = promotion.Key }); parameters.Add(new SqlParameter() { SqlDbType = SqlDbType.UniqueIdentifier, ParameterName = instanceIdArgument, Value = base.InstancePersistenceContext.InstanceView.InstanceId }); storedProcInvocationBuilder.Append(";"); commandTextBuilder.AppendLine(storedProcInvocationBuilder.ToString()); promotionNumber++; } } }