一个DAO类,用于访问SQL server、MySQL和MongoDB中的数据库

本文关键字:MySQL MongoDB 数据库 server DAO 用于 SQL 访问 一个 | 更新日期: 2023-09-27 18:20:12

有没有一种方法可以创建一个像EmployeeDAO这样的DAO类,并且这个类应该能够使用SQL ServerMySqlMongoDB。它应该以某种方式更改并与MySqlConnection/SqlConnectionMySqlCommand/SqlCommand一起工作。现在,我必须为每个数据库创建三个类。有什么接口我可以使用吗?我找不到。非常感谢。

public abstract class DaoFactory
{
  public static DaoFactory GetInstance(DaoConnection daoConnection)
    {
        DaoFactory instance = null;
        switch (daoConnection)
        {
                case DaoConnection.Default:
                case DaoConnection.MySQL:
            {
                instance = new MySqlConnectionFactory(MySqlServer, MySqlPort, MySqlUser, MySqlPassword);
                break;
            }
        }
        return instance;
    }
 protected string ConnectionString { get; set; }
 public abstract DbConnection GetConnection();
}
public class MySqlConnectionFactory : DaoFactory
{
    public MySqlConnectionFactory(string server, string port, string user, string password) : base(server, port, user, password)
    {
        this.ConnectionString = string.Format("Server={0}; Port={1} Uid={2}; Pwd={3}; pooling=true", server, port, user, password);
    }
    public override DbConnection GetConnection()
    {
        return new MySqlConnection(this.ConnectionString);
    }
}

public class EmployeeDao : IEmployeeDao
{
    private const string InsertEmployee = "INSERT INTO employees VALUES (@name,@age)";
    private DaoFactory daoFactory;
    EmployeeDao(DaoFactory daoFactory)
    {
        this.daoFactory = daoFactory;
    }
    public void Insert(Employee employee)
    {
        MySqlConnection connection =  (MySqlConnection) this.daoFactory.GetConnection();
        using (connection)
        {
            var commannd = new MySqlCommand(InsertEmployee, connection);
            commannd.ExecuteNonQuery();
        }
    }

一个DAO类,用于访问SQL server、MySQL和MongoDB中的数据库

在2018年仍然是一个有效的问题。我相信答案是Microsoft Orleans,它具有令人难以置信的严重的设计含义(参见Actor模型),但完全抽象了数据库
建议对完整的样板进行研究:https://github.com/Maarten88/rrod

从那里你可以使用:

  • https://dotnet.github.io/orleans/Documentation/Runtime-Implementation-Details/Relational-Storage.html
  • 和/或https://github.com/OrleansContrib/Orleans.Providers.MongoDB

设计模式本身就值得一个完整的主题:https://dotnet.github.io/orleans/Documentation/Introduction.html

这是一个非常庞大的实现,但我相信这是解决这个问题的正确方法。此外,使用RROD样板作为参考应确保App&DB级别(无论是NoSql或ACID)。