I need to isolate access to my data access layer (DAL) from my user interface layer through a business logic layer (BLL). I love the way ADO.NET DataTables and DataRows work and need to leverage all the built-in binding that they do, so I want to use DataSets as the foundation of my DAL. To fully isolate the user interface from the DAL the BLL needs to subclass the DataTable and DataRow objects.
It does not appear that it is possible to inherit from DataRow due to a dependency on a non-constructible, non-inheritable DataRowBuilder class. I'm OK with creating my own version of DataRowBuilder if that's what it takes.
Code sample based on Northwind is below. The Northwind dataset was built with the VS drag-and-drop interface, by simply dropping the Shippers table. Please disregard the implementation of GetShipper, it is not the point of the example.
The point of the example, and the essence of my question, is how to make the BLL.Shipper class (shown below) inherit from the DAL's Northwind.ShipperRow.
PS: I've seen a tendency for people to assert "why do you want to do that" in response to these type of questions. I can explain if necessary but it should be enough to want to separate the UI layer from the data access layer and have it instead use a business logic layer exclusively.
Public Class ShipperEntity
Public Function GetShipper(ByVal ShipperID As Integer) As Shipper
Dim ad As New NorthwindTableAdapters.ShippersTableAdapter
Dim t As Northwind.ShippersDataTable = ad.GetData
Dim r As Northwind.ShippersRow = _
DirectCast(t.Rows(ShipperID - 1), Shipper)
Return DirectCast(r, Shipper)
Public Class Shipper