Typed Dataset not using TypedTableBase in .NET 4

后端 未结 3 550
面向向阳花
面向向阳花 2020-12-21 02:20

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         


        
相关标签:
3条回答
  • 2020-12-21 02:53

    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
    0 讨论(0)
  • 2020-12-21 03:00

    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.

    0 讨论(0)
  • 2020-12-21 03:02

    All this is correct but in my case I had to support source code which needs to run with .Net 2.0 and .Net 4.0. My objective was to change as little code as possible.

    My solution was to create a partial extension under .Net 4.0 and bind it to the 4.0 application. This looks like:

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

    This works like a charme!!!

    0 讨论(0)
提交回复
热议问题