2009-09-16 3 views
0

Я использую System.Data.Design.TypedDataSetGenerator, чтобы преобразовать файл .xsd (сгенерированный VS2008) в строго типизированный класс DataSet, совместимый с .NET 2.0. Из того, что я понял из 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); 
    } 

EDIT: играл немного больше и нашел, что я должен добавить вызов CodeDomProvider.GenerateCodeFromNamespace(), а также CodeDomProvider.GenerateCodeFromCompileUnit() (комментировал в коде выше). Теперь он отлично работает!

ответ

0

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

Смежные вопросы