Project Description
To support more than one database using System.Data.Common you need connection string conversion, light sql reparsing, multi-cast, trace and many more utilities

Is your data tier really cross database?
It isn't if you don't run it against several data sources at the same time, all the time. Otherwise you never learn about the edge cases. When writing library code (code to be consumed by unknown, other developers), you can't know in advance what sort of database they might have available. We can't even tell if OleDb will stick around. So it pays to write defensive, cross database code. To pull it off, we can start with System.Data.Common and then we have a lot of code to write to reduce the number of switch statements we put in our library code. This library hopes to do that for various lowest common denominator OleDb and Odbc datasources, but also support native 'fall forward' functionality when the library can detect that something is supported, like batches or bulk insert.

Controller Pattern
A table controller is a type of active record pattern. If you were going to implement one class per table with insert, update, select and deleted, then use this.

Manager Pattern
A manager is referring to a connection and transaction manager, which is a common need of classes that consume table controllers. These need to be opened/closed and disposed of to avoid unexpected rollbacks/commits, connection links, connection-not-open errors, etc.

ADO.NET supports some limited cross-database support. To actually pull this off, SQL commands need to be lightly processed to convert parameters from one dialect to another, plus several other pain points, such as different connections string layouts.

Namespaces and Convention over Configuration
All code is written assuming that tables have namespaces in the form of nstablename.

All table and column names are assumed to be delimited words, e.g. nsbook_sales.

Not all databases support easy trace this library provides for extensive trace, both of the SQL stream and the libraries activities using System.Diagnostics and TraceSource.

A Null utility is provided for converting DbNull.Value to 'null' or to 'neutral' .NET values.

An Enum utility is provided for converting Enums to their string, numeric or description and back.

A configuration utility is provided to hide some boilerplate ConfigurationManager code.

Dual Licensed
MIT And MSPL. So you can use it on both open source and closed source.

Last edited Sep 8, 2012 at 8:08 PM by matthewdeanmartin, version 3