2009-09-16 40 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

解決它自己,請參閱問題中的評論。