TypedDataSetGenerator игнорирует параметр HierarchicalUpdate? - PullRequest
0 голосов
/ 16 сентября 2009

Я использую System.Data.Design.TypedDataSetGenerator для преобразования файла .xsd (созданного VS2008) в строго типизированный класс DataSet, совместимый с .NET 2.0. Насколько я понимаю из MSDN, параметр HierarchicalUpdate должен быть указан, чтобы получить тот же результат, который генерирует IDE VS2008:

HierarchicalUpdate - Создает типизированные наборы данных, которые имеют TableAdapterManager и связанные методы для включения иерархического обновления.

Итак, я указал эту опцию, как вы можете видеть в приведенном ниже коде, но выводимый файл .Designer.cs не содержит TableAdapterManager ... даже не имеет TableAdapters! Есть ли у VS2008 собственный внутренний генератор Typed DataSet, который он использует, или я что-то упустил, или это ошибка .NET?

  string schemaContent;

  using (StreamReader reader = new StreamReader(@"C:\CVS\CallRetrieverPlain\CallRetrieverPlain\CallRecordingsDataSet.xsd"))
  {
    schemaContent = reader.ReadToEnd();
  }

  string output = string.Empty;

  using (CSharpCodeProvider cscp = new CSharpCodeProvider())
  {
    CodeCompileUnit ccu = new CodeCompileUnit();
    CodeNamespace cn = new CodeNamespace("DataSet.Generation.Test");

    output = TypedDataSetGenerator.Generate(schemaContent, ccu, cn, cscp,
                                            TypedDataSetGenerator.GenerateOption.HierarchicalUpdate);

    using (StringWriter codeWriter = new StringWriter())
    {
      // *** this line causes full generation as expected ***
      cscp.GenerateCodeFromNamespace(cn, codeWriter, null);
      cscp.GenerateCodeFromCompileUnit(ccu, codeWriter, null);

      output = codeWriter.ToString();
    }
  }

  using (StreamWriter writer = new StreamWriter(@"C:\test-tmp\CallRecordingsDataSet.Designer.cs"))
  {
    writer.Write(output);
  }

РЕДАКТИРОВАТЬ : поигрался немного больше и обнаружил, что мне нужно добавить вызов CodeDomProvider.GenerateCodeFromNamespace(), а также CodeDomProvider.GenerateCodeFromCompileUnit() (прокомментировано в приведенном выше коде). Теперь работает отлично!

1 Ответ

0 голосов
/ 16 сентября 2009

Решил сам, смотри комментарии в вопросе.

...