TypedDataSetGenerator忽略HierarchicalUpdate选项?

时间:2009-09-16 10:10:51

标签: c# .net code-generation

我正在使用System.Data.Design.TypedDataSetGenerator.xsd文件(由VS2008生成)转换为与.NET 2.0兼容的强类型DataSet类。根据我从MSDN的理解,必须指定HierarchicalUpdate option以获得VS2008 IDE生成的相同结果:

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 :(得分:0)

自己解决,看问题中的评论。