在.NET 4中不使用TypedTableBase的类型化数据集

Mat*_*eid 4 c# .net-4.0 dataset strongly-typed-dataset

我正在将我们的DAL类库迁移到.NET 4(从.NET 3.5).我们经常使用类型化数据集,我们经常迭代表:

foreach(var row in ds.MyTable) var tmp = row.ID;
Run Code Online (Sandbox Code Playgroud)

这不再起作用,因为设计人员更改了数据集的代码,以便表格不再来自TypedTableBase<T>,而是来自DataTable(并实现非泛型IEnumerable).这就是差异所显示的.因此,该行在object编译时是类型的.

有人知道这是否是通常的行为?目前,我正在按照下面所示的方式进行,但我希望有一个更优雅的解决方案:

foreach(var row in ds.MyTable.Cast<MyDs.MyRow>()) var tmp = row.ID;
Run Code Online (Sandbox Code Playgroud)

小智 11

刚刚遇到这个,并通过执行以下操作来纠正它:

在解决方案资源管理器中选择xsd文件,然后单击"运行自定义工具".将使用TypedTableBase而不是DataTable和IEnumerable重新生成设计器文件.


Kyl*_*Mit 8

接受的答案大部分都是完整的,但不能完全解决问题.
这是我在这个问题上的问答的再现.

问题:

简而言之,MSDataSetGenerator工具运行时会出现问题,但System.Data.DataSetExtensions程序集尚未加载到当前的Visual Studio进程中.

解决方案:

加载程序集的一种方法是打开任何XSD文件,然后重新生成设计器代码.

以下步骤应生成相应的设计器文件:

  1. 打开任何XSD文件到设计器视图(这会加载DataSetExtensions.dll)
  2. 右键单击XSD并选择 Run Custom Tool

以下是问题和图片解决方案的完整分步演练

其他实例:

在以下错误票证中也向Microsoft报告了此问题: