我们正在使用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中的查询使用双引号因此我们需要修改每个查询的语法 我们应该为此做些什么。
我们应该使用工厂设计模式还是其他一些设计模式,并为SQL版本创建重复的存储库类文件?
我们是否有任何需要查询和基于数据库的实用程序 相应地转换语法?
答案 0 :(得分:0)
首先,您应该设置应用程序,因为DataAccess层使用Repository层来执行所有CRUD操作。 BusinessLogic仅使用DataAccess层。因此,您的应用程序正在传递与您的数据库对象相关的POCO对象。
现在,您实现了依赖项注入,以便您的DataAccess层不直接实例化Repository对象,而是请求typeof Repository。您当前的存储库是使用PostgreSQL实现的;您的新存储库将使用SQL Server实现。两个存储库都将实现相同的接口,以便DataAccess层不需要了解有关数据库的任何信息。准备好切换数据库时,可以更改依赖项注入配置以返回SQL Server存储库对象。
以下是依赖注入的简单框架:Ninject