代码之家  ›  专栏  ›  技术社区  ›  Ian Kemp David Boike

是否忽略层次结构更新选项?

  •  0
  • Ian Kemp David Boike  · 技术社区  · 15 年前

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

    层次结构更新 -生成具有TableAdapterManager和相关方法的类型化数据集,以启用分层更新。

    所以我已经指定了这个选项,正如您在下面的代码中看到的,但是输出 .Designer.cs 文件不包含 TableAdapterManager …它甚至没有 TableAdapters !VS2008是否有自己使用的内部类型化数据集生成器,或者我是否缺少某些内容,或者这是.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 回复  |  直到 15 年前
        1
  •  0
  •   Ian Kemp David Boike    15 年前

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