Passando parâmetros como XML para um procedimento armazenado

Eu tenho um requisito para passar parâmetros como Xml para meus procedimentos armazenado

Tenho um serviço WCF na camada intermediária que faz chamadas para minha camada de dados que, por sua vez, encaminha a solicitação para o procedimento armazenado apropriad

design é que o serviço WCF é responsável por criar o Xml para passar para o Repositóri

Estou pensando em manter o controle de quais parâmetros estão contidos no Xml na camada intermediária ou usar um Dicionário criado pelo cliente que, em seguida, converto em Xml na camada intermediári

No momento em que fui para o último - por exemplo:

 public TestQueryResponseMessage TestQuery(TestQueryRequestMessage message)
 {
        var result = Repository.ExecuteQuery("TestQuery", ParamsToXml(message.Body.Params));

        return new TestQueryResponseMessage
        {
            Body = new TestQueryResponse
            {
                TopicItems = result;
            }
        }
    }


private string ParamsToXml(Dictionary<string, string> nvc)
{
        //TODO: Refactor
        StringBuilder sb = new StringBuilder();

        sb.Append("<params>");
        foreach (KeyValuePair<string, string> param in nvc)
        {
            sb.Append("<param>");
            sb.Append("<" + param.Key + ">");
            sb.Append(param.Value);
            sb.Append("</" + param.Key + ">");
            sb.Append("</param>");
        }
        sb.Append("</params>");

        return sb.ToString();
}

No entanto, talvez eu precise fazer da primeira maneira. Por exemplo

public TestQueryResponseMessage TestQuery(TestQueryRequestMessage message)
{
       string xml = string.Format("<params><TestParameter>{0}</TestParameter></params>",message.Body.TestParameter)

       var result = Repository.ExecuteQuery("TestQuery", xml);

      return new TestQueryResponseMessage
      {
          Body = new TestQueryResponse
          {
                    TopicItems = result;
          }
      }
}

O que o hivemind recomenda?

questionAnswers(4)

yourAnswerToTheQuestion