开发支持多个数据库的应用

时间:2015-01-09 20:05:41

标签: c# mysql sql database ms-access

我正在开发一个支持MySQL的C#桌面应用程序,我有以下问题

1)是否可以开发一个版本的应用程序,根据客户的需求支持不同的数据库?我的意思是,如果我想向某人提供用于测试目的的应用程序支持Access数据库或将应用程序安装到已经安装了MySQL或SQL的客户

2)如果上述情况属实,我该如何实现呢?

3 个答案:

答案 0 :(得分:2)

是。 .NET有一个数据提供程序工厂(DbProviderFactory),可用于支持多个数据库。

我在这里有一篇博文:

http://blogs.msmvps.com/deborahk/dal-using-a-data-provider-factory/

它提供了一个代码示例。

答案 1 :(得分:0)

马诺斯,

这是可行的,您的应用程序将像所有数据库一样工作。但是,如果他们有不同版本的MySQL Server,如5.1,5.5,5.6需要更改一些数据库和应用程序代码级别的更改。

答案 2 :(得分:0)

您可以使用实体框架(通过代码优先)作为数据库层代码,可以在应用程序app.config中配置它以与MS Sql Server,Sql Compact Edition,Sql Express,MySql和SQLite一起使用,和其他可能的人。

关于让EF与PostreSQL合作的博客,但我不建议支持它,它很乏味,而且很有可能。

或者,您可以使用PetaPoco(微型ORM),它也支持不同的数据提供程序,但您仍然必须自己编写Select Queries,这需要为活动数据提供程序编写写SQL查询。

实体框架使用包含SQL查询生成器的实体框架提供程序为您编写所有SQL。

但是,根据应用程序的性质,我建议只使用100%的SQLite。您可以将其嵌入到应用程序中,而无需根据它们安装数据库服务器软件。然后,您可以依赖PetaPoco或您自己的数据层,而无需担心SQL Query转换以及数据库服务器的差异。

我建议使用NoSql,但在我看来,没有任何免费的NoSql解决方案(我知道)现在在.Net平台上都是非常可行的。

在能够支持(许多数据库服务器)而不必自己管理任何代码方面,实体框架可能是最好的解决方案。

在拍摄Entity Framework之前,请考虑一下这样一个事实,即您可以使用CodeFrist生成数据库并自动为其执行升级。例如。您创建定义表及其上的列的实体(可以相互继承以重用其他表上的列名称/类型)。您可以创建迁移类来定义带有更改的新版本,这样您就可以自动将数据库的X.1版迁移到X.9等。它非常方便。