Csharp/C#教程:在.NET 4中不使用TypedTableBase的类型化数据集分享


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

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

foreach(var row in ds.MyTable) var tmp = row.ID; 

这不再起作用,因为设计人员更改数据集的代码,使得表不再从TypedTableBase派生,而是从DataTable派生(并实现非通用的IEnumerable )。 这就是差异所显示的。 因此,该行在编译时是object类型。

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

 foreach(var row in ds.MyTable.Cast()) var tmp = row.ID; 

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

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

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

问题:

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

解决方案:

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

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

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

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

其他实例:

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

所有这些都是正确的,但在我的情况下,我必须支持需要与.Net 2.0和.Net 4.0一起运行的源代码。 我的目标是尽可能少地改变代码。

我的解决方案是在.Net 4.0下创建一个部分扩展并将其绑定到4.0应用程序。 这看起来像:

 namespace NamespaceOfMyDataSet { public partial class MyDataSet : global::System.Data.DataSet { public partial class MyTypedTable : global::System.Data.TypedTableBase { public System.Data.DataRowCollection GetRows() { return this.Rows; } } } } 

这就像一个魅力!

上述就是C#学习教程:在.NET 4中不使用TypedTableBase的类型化数据集分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1007517.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐