2009-09-01 114 views
1

我有需要能夠使用任何一個sqlite3的DATEBASE或MySQL數據庫的應用程序。客戶希望能夠在兩者之間進行選擇(顯然,一個是本地的,一個是在線的)。C#處理多種數據庫類型?

我的想法是通過創建一個具有所有常用方法(ExecuteReader,ExecuteScalar等)的數據庫接口,然後使用擴展此接口的SQLite3Database類和擴展它的MySQLDatabase類。在應用程序初始化時,它將根據客戶選擇的設置創建數據庫接口。

但是,如果我做的這條路,那麼我鬆訪問服務器資源管理器和添加數據集的簡單方法等

所以我的問題是......我要對這個正確的方法是什麼?有沒有更好的選擇,我錯過了?如果不是,當我創建數據連接點VIA代碼時,如何才能訪問服務器探索者的可用性?

謝謝。

回答

7

如果應用程序是不平凡的,那麼我會說你應該看ORM工具。

它不會解決問題的100%,但它會得到你。例如,NHibernate是我當前項目的ORM,並且只有很少的數據庫特定的代碼。

+0

+1 NHibernate的。鏈接:http://nhforge.org/Default.aspx – 2009-09-01 23:28:57

+0

同意。不要重新發明輪子。評估幾個O/RM並選擇一個適合您的需求。 – TrueWill 2009-09-02 01:48:31

+0

完美,謝謝。 – Kyle 2009-09-04 14:15:59

1

您可以使用OR/M,其抽象所有DB細節爲你的。

或者,您可以爲應用程序創建自己的數據訪問層。你可以編寫一些DAL接口(例如包含'GetPersonById'方法)。然後,你可以寫幾個這些接口的實現:

  • 一個實現爲目標的MySQL
  • 靶向SqlLite3另一種實現方式。

在您的應用程序中,您針對接口進行編程,而不是直接針對實現。 編寫一個工廠類,它可以實現這些接口的正確實現(例如,根據配置設置)。