使用 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 查询使用双引号,因此我们需要修改每个查询的语法
我们应该为此做些什么。
我们应该使用工厂设计模式还是其他一些设计模式并为 SQL 版本创建重复的存储库 class 文件?
我们有任何基于数据库的查询实用程序吗
相应地转换语法?
- 还有其他选择吗?
首先,您应该设置您的应用程序,因为 DataAccess 层对所有 CRUD 操作使用 Repository 层。您的 BusinessLogic 仅使用数据访问层。因此,您的应用正在传递与您的数据库对象相关的 POCO 对象。
现在,您实现了依赖注入,这样您的数据访问层就不会直接实例化一个 Repository 对象,而是请求一个 typeof Repository。您当前的存储库是使用 PostgreSQL 实现的;您的新存储库将通过 SQL 服务器实现。两个存储库将实现相同的接口,因此数据访问层不需要了解数据库的任何信息。当您准备好切换数据库时,您将依赖注入配置更改为 return SQL 服务器存储库对象。
这是一个简单的依赖注入框架:Ninject
我们正在使用 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 查询使用双引号,因此我们需要修改每个查询的语法 我们应该为此做些什么。
我们应该使用工厂设计模式还是其他一些设计模式并为 SQL 版本创建重复的存储库 class 文件?
我们有任何基于数据库的查询实用程序吗 相应地转换语法?
- 还有其他选择吗?
首先,您应该设置您的应用程序,因为 DataAccess 层对所有 CRUD 操作使用 Repository 层。您的 BusinessLogic 仅使用数据访问层。因此,您的应用正在传递与您的数据库对象相关的 POCO 对象。
现在,您实现了依赖注入,这样您的数据访问层就不会直接实例化一个 Repository 对象,而是请求一个 typeof Repository。您当前的存储库是使用 PostgreSQL 实现的;您的新存储库将通过 SQL 服务器实现。两个存储库将实现相同的接口,因此数据访问层不需要了解数据库的任何信息。当您准备好切换数据库时,您将依赖注入配置更改为 return SQL 服务器存储库对象。
这是一个简单的依赖注入框架:Ninject