使用petapoco连接不同的数据库

时间:2016-05-04 13:55:01

标签: c# asp.net-mvc postgresql 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);
    }

现在我们也想支持SQLserver数据库。因为PostgreSQl中的查询使用双引号因此我们需要修改每个查询的语法 我们应该为此做些什么。

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

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

  3. 还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

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

现在,您实现了依赖项注入,以便您的DataAccess层不直接实例化Repository对象,而是请求typeof Repository。您当前的存储库是使用PostgreSQL实现的;您的新存储库将使用SQL Server实现。两个存储库都将实现相同的接口,以便DataAccess层不需要了解有关数据库的任何信息。准备好切换数据库时,可以更改依赖项注入配置以返回SQL Server存储库对象。

以下是依赖注入的简单框架:Ninject