Я использую 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()
(комментировал в коде выше). Теперь он отлично работает!