Hi Doug,
the design sounds clean to me.
There is no problem with creating Typed DataRows of Typed DataTables that eventually will be commited to the DB through our DataStore Methods in memory only.
Example:
If you would want to create Typed DataRows of Type AGiftDetailRow in the CSV Parser do the following:
1) In the CSV Parser: create a Typed DataTable object that represents the DB Table that the DataRows should end up in in the DB, e.g. new GiftBatchTDSAGiftDetailTable GiftDetailDT = new GiftBatchTDSAGiftDetailTable("AGiftDetail"); (You can find out which Type you need to use for a particular Typed DataTable by inspecting what Type the Typed DataTable is in the Typed DataSet (e.g. by hovering over a FMainDS.AGiftDetail statement in code - you will see it is of Type 'GiftBatchTDSAGiftDetailTable'.)
2) Create a Typed DataRow (that is populated with default values, if you want that to happen): AGiftDetailRow GiftDetailsDR = GiftDetailDT.NewRowTyped(true);
3) Perform various assignments to set up data in the DataRow, e.g. 'GiftDetailsDR.LedgerNumber = x'.
4) Add the DataRow to the Typed DataTable, e.g. 'GiftDetailDT.Rows.Add(GiftDetailsDR);
At the end of the CSV Parser Method you return GiftDetailDT to the calling Method (ImportGiftBatches) which stores it in eg. 'TmpGiftDetailDT' and which can then simply merge the DataRow that you created in the CSV Parser into the Typed DataSet that will in the end get committed to the DB (FMainDS) by issuing FMainDS.Merge(TmpGiftDetailDT) - that is, if the CSV Parser issues no serious Data Validation problems for that DataRow. You can repeat that process with as many rows as you want and will end up will all the Typed DataRows being added to the Typed DataTable FMainDS.AGiftDetail, which will in the all end committed to the DB e.g. using AGiftDetailAccess.SubmitChanges(FMainDS.AGiftDetail).
I hope that is clear; in case you have further questions don't hesitate to make further inquiries.