2009-09-16 76 views
0

我使用System.Data.Design.TypedDataSetGenerator.xsd文件(由VS2008生成)转换为与.NET 2.0兼容的强类型DataSet类。从我从MSDN明白了,HierarchicalUpdate option必须指定得到相同的结果是VS2008 IDE生成:TypedDataSetGenerator忽略HierarchicalUpdate选项?

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()(在上面的代码注释)。它现在完美运行!

回答

0

解决它自己,请参阅问题中的评论。