Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typed Dataset not using TypedTableBase in .NET 4

I'm migrating our DAL class library to .NET 4 (from .NET 3.5). We're using typed datasets quite often, and we often iterate over tables:

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

This does not work anymore, as the designer changes the dataset's code so that tables do not derive from TypedTableBase<T> anymore, but from DataTable (and implement the non-generic IEnumerable). That's what the diff shows. Therefore, the row is of type object at compile-time.

Does anybody know if this is the usual behavior? At the moment, I'm doing it the way shown below, but I hope there's a more elegant solution:

foreach(var row in ds.MyTable.Cast<MyDs.MyRow>()) var tmp = row.ID;
like image 378
Matthias Meid Avatar asked Nov 29 '22 18:11

Matthias Meid


2 Answers

Just ran into this today and was able to correct it by doing the following:

Select the xsd files in the solution explorer and click "Run Custom Tool". The designer files will be regenerated using TypedTableBase instead of DataTable and IEnumerable.

like image 190
Mark Avatar answered Dec 10 '22 13:12

Mark


The accepted answer is mostly complete, but will not fully resolve the issue.
Here's a reproduction of my question and answer on this issue.

The Problem:

In short, the problem occurs when the MSDataSetGenerator tool runs, but the System.Data.DataSetExtensions assembly has not yet been loaded into the current Visual Studio process.

The Solution:

One way to load the assembly is just to open any XSD file and THEN re-generate the designer code.

The following steps should generate the appropriate designer file:

  1. Open any XSD file to the designer view (this loads DataSetExtensions.dll)
  2. Right Click on the XSD and Select Run Custom Tool

Here's a full step by step walkthrough of the issue and solution with pictures

Other Instances:

This problem has also been reported to Microsoft in the following bug tickets:

  • #668724 - MSDataSetGenerator generates incorrect output sometimes
  • #733077 - MSDataSetGenerator does not generate TypedTableBase derived classes
like image 24
KyleMit Avatar answered Dec 10 '22 14:12

KyleMit