创建支持多个后端的Web应用程序

时间:2015-06-04 17:12:01

标签: c# mysql asp.net sql-server database

我需要在Asp.Net和C#中创建一个基于Web的数据库应用程序,它将适用于所有数据库提供程序,如SQL Server,MySQL等。如果客户端有SQL Server,程序中的一个小改动应该使我的Web应用程序可以使用SQL Server,如果客户端有MySQL,它也应该与MySQL一起使用。

是否有可用的工具?或者我是否应该遵循任何编程程序或方法来实现它?

所以指导我实现上述方案。

3 个答案:

答案 0 :(得分:2)

为了保持外部系统(例如数据库)的独立性,您需要将解决方案设计为仅与接口通信。然后,您可以使用多种技术(包括依赖项注入)来确定在运行时使用哪种实现。

为了简单起见,让我们只使用工厂。

首先要确定数据库应该做什么。简单的例子 - 我们将存储或检索整数。所以首先让我们定义那个接口。我为了简单而省略了异步 - 但是在与DB交谈时你真的想要它。

public interface IDatabase{
    void Store(int value);
    int Get();
}

所以现在我们的调用代码可以用来引用任何类型的数据库。

接下来,我们需要为每个DB提供不同类型的类

public class SqlServerDB : IDatabase{
    public void Store(int value){//store it}
    public void Get(){//get it}
}

public class MySqlDB : IDatabase{
    public void Store(int value){//store it}
    public void Get(){//get it}
}

同样,您不希望调用代码知道实现,因此您无法仅使用new实例化该对象。相反,您需要构建一个知道不同类型数据库的类。

我在这里使用了一个字符串,但你应该在实际代码中使用枚举。

public static class DatabaseFactory{
     public static IDatabase GetDatabase(string dbName){
         switch(dbName){
             case "sqlserver":
                return new SqlServerDB();
             case "mysql":
                return new MySqlDB();
             default:
                 throw new ArgumentException("Don't know about that DB");
         }
     }
}

现在您的调用代码不必随DB更改。如果您有一个配置对象(比如内置的.NET对象),您可以轻松更改正在使用的数据库。

IDatabase myDB = DatabaseFactory.GetDatabase(Config.DBName);
myDB.Store(191);

int result = myDB.Get();
//result will equal 191!

答案 1 :(得分:1)

我会使用dapper这是.Net的微型ORM。它支持sqlite,SQL Server CE,Firebird,Oracle,MySQL,PostgreSQL和SQL Server。

我个人非常满意使用dapper,它实际上是由Stack Overflow开发和使用的。

答案 2 :(得分:0)

使用SimpleData http://simplefx.org/simpledata/docs/超级易用且支持: SQL Server 2005及更高版本 SQL Server Compact Edition 4.0 神谕 VistaDB的 mysql 4.0及更高版本 sqlite 3.0及更高版本 PostgreSQL的 SQLAnywhere的 Informix的 Microsoft Access 2000,2003和2007