使用 petapoco 连接不同的数据库

connecting different database using petapoco

我们正在使用 petapoco mini ORM,它具有用于连接到 PostgreSQL 数据库的内联查询。

public async Task<IEnumerable<P>> FetchExistP(CQ c)
    {
        var query = "select * from \"P\"where \"Pr\"= " + c.M;
        var database =  BuildDatabase(c.DatabaseId.ToString(CultureInfo.InvariantCulture));
        return await database.FetchAsync<P>(query);
    }

现在我们想要支持 SQL 服务器数据库,因为 PostgreSQl 中的 well.Since 查询使用双引号,因此我们需要修改每个查询的语法 我们应该为此做些什么。

  1. 我们应该使用工厂设计模式还是其他一些设计模式并为 SQL 版本创建重复的存储库 class 文件?

  2. 我们有任何基于数据库的查询实用程序吗 相应地转换语法?

  3. 还有其他选择吗?

首先,您应该设置您的应用程序,因为 DataAccess 层对所有 CRUD 操作使用 Repository 层。您的 BusinessLogic 仅使用数据访问层。因此,您的应用正在传递与您的数据库对象相关的 POCO 对象。

现在,您实现了依赖注入,这样您的数据访问层就不会直接实例化一个 Repository 对象,而是请求一个 typeof Repository。您当前的存储库是使用 PostgreSQL 实现的;您的新存储库将通过 SQL 服务器实现。两个存储库将实现相同的接口,因此数据访问层不需要了解数据库的任何信息。当您准备好切换数据库时,您将依赖注入配置更改为 return SQL 服务器存储库对象。

这是一个简单的依赖注入框架:Ninject