Just like everyone else I usually use datasets for database reads only. When updating, I simply write the changes directly to the database using SqlCommands.  In my latest app I went in search of trouble and decided use .Update(DataSet) for writes.  There were several implementation details which were semi-ugly, but the main thing that currently has me stumped is related to referential integrity:

If I have 2 tables, lets say Orders and OrderRows and the following code:

OrdersDA.Update(MyDataSet("Orders"))
OrderRowsDA.Update(MyDataSet("OrderRows"))

The code will work for inserts but not for deletes, since deletes must be done in the reverse order:

OrderRowsDA.Update(MyDataSet("OrderRows"))
OrdersDA.Update(MyDataSet("Orders"))

So basically I can't just modify the dataset in the biz layer and send it to a generic "update" method in the data layer which persists the changes to the database - I actually need to know much than I want in inside the data later to in order to make this work. 

Is there something simple which I am missing (code samples anyone?) or is really as limited as it seems? 

 

P.S. I guess my mom knew what she was talking about when she said that Metallica is torture - US military interogating Iraqi POWs with Sesame Street & Metallica  :) 
<edited to remove any political overtones>