一个DAO类,用于访问SQL server、MySQL和MongoDB中的数据库
本文关键字:MySQL MongoDB 数据库 server DAO 用于 SQL 访问 一个 | 更新日期: 2023-09-27 18:20:12
有没有一种方法可以创建一个像EmployeeDAO这样的DAO类,并且这个类应该能够使用SQL Server
、MySql
和MongoDB
。它应该以某种方式更改并与MySqlConnection/SqlConnection
和MySqlCommand/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();
}
}
在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)。