我在用
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()
(以上代码中有注释)。它现在工作得很好!