2009-09-01 5 views
1

J'ai une application qui doit pouvoir utiliser une base de données sqlite3 ou une base de données mysql. Le client veut pouvoir choisir entre les deux (évidemment, l'un serait local et l'autre serait en ligne). Mes pensées pour ce faire seraient en créant une interface de base de données qui a toutes les méthodes communes (ExecuteReader, ExecuteScalar, etc) puis ayant une classe SQLite3Database qui étend cette interface et une classe MySQLDatabase qui l'étend également. Lors de l'initialisation de l'application, l'interface de la base de données est créée en fonction des paramètres choisis par le client.C# gère plusieurs types de bases de données?

Cependant, si je fais cette route, je lâche l'accès à l'explorateur de serveur et les méthodes simples pour ajouter des jeux de données, etc.

Mes questions sont ... Vais-je sur ce la bonne façon? Y a-t-il une meilleure option qui me manque? Et si non, comment puis-je avoir accès à la convivialité des explorateurs de serveurs lorsque je crée les points de connexion de données code VIA?

Merci.

Répondre

7

Si l'application est non-triviale, alors je dirais que vous devriez regarder les outils ORM.

Cela ne résoudra pas 100% du problème, mais vous y arriverez. Par exemple, NHibernate est l'ORM pour mon projet actuel, et il y a très peu de code spécifique à la base de données.

+0

+1 pour NHibernate. Lien: http://nhforge.org/Default.aspx –

+0

D'accord. Ne réinventez pas la roue. Évaluez plusieurs O/MR et choisissez-en un qui convient à vos besoins. – TrueWill

+0

Parfait, merci. – Kyle

1

Vous pouvez utiliser un OR/M qui résume toutes les spécificités DB pour vous. Ou, vous pouvez créer votre propre couche d'accès aux données pour votre application. Vous pouvez écrire certaines interfaces DAL (qui contiennent par exemple une méthode 'GetPersonById'). Ensuite, vous pouvez écrire plusieurs implémentations pour ces interfaces:

  • une implémentation qui cible MySQL
  • une autre implémentation qui cible SqlLite3.

Dans votre application, vous programmez sur les interfaces, pas directement sur les implémentations. Écrire une classe d'usine qui permet d'obtenir la bonne implémentation de ces interfaces (en fonction d'un paramètre de configuration par exemple).