In our company, we work together with several database systems (MySQL, MSSQL, PL/SQL, SQlite and SQLCe) for various projects. Because of this, we developed a library that puts everything into a nice interface where we can connect to each database without worrying about which database is now behind. But this library always required to install every database on a clients computer because .Net insisted that (because of the references). So we used MEF to create database plugins where the application only loads the appropriate plugin at startup and we don't need any other database systems installed on the host system.
Anyway, we still struggle because of the differences of each database. Let's say we want to have procedures that automatically generate required tables and data in the destination database if they aren't available. Or if the different databases uses different datatypes. Things are getting very complicated and as for now, we're interested in also using LINQ2SQL which doesn't seem to be able to handle MySQL, SQlite and PL/SQL.
My question:
Is there any free/oss C# library that takes over this tasks? Where we can have full control over our databases without thinking about which database is now behind?