支持在ADO.NET数据提供程序独立代码中处理特定于数据提供程序的差异?

时间:2010-08-18 05:00:22

标签: c# sql design-patterns ado.net

我有一个ADO.NET数据访问层,它已经被编写为可以与多个数据提供者一起工作,并且发现我无法使某些操作完全独立于数据提供者。

作为我的应用程序安装功能的一部分,它告诉DAL使用表和一些数据创建数据库。 DAL使用Sql命令CREATE DATABASE。现在这对SQL Server来说很好,但是在使用SQLite时,不需要数据库创建步骤,因为连接字符串中指定的数据源足以定义要使用的数据库。

我目前正在计划通过编写带有虚拟createDatabase方法的'DatabaseCreator'类来处理这个问题,我可以为特定数据提供程序创建子类,并且有一个工厂根据所使用的数据提供程序提供特定的DatabaseCreator ,或默认的。

这种方法的问题在于我的应用程序不会“正常”使用与创建数据库的默认方式不兼容的新数据提供程序,但是需要新版本的新版本的DatabaseCreator用于新的数据提供者。

解决这个问题的唯一方法就是让我的应用程序配置一个DatabaseCreator,以类似于使用数据提供程序配置的方式使用,即DatabaseCreator可以在单独的程序集中提供。 / p>

我是ADO.NET的新手,所以在尝试编写独立于数据提供程序的应用程序时,我不确定这类问题的常见程度。

在ADO.NET中是否存在对此类方法的支持?

E.g。供应商提供或第三方现有库定义辅助类的接口和/或实现,以实现其实现可能依赖于数据提供者的常见操作?

或者,有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

在ADO.NET中,没有用于创建数据库的定义“标准”方法。某些数据库需要sql(CREATE DATABASE),而某些嵌入式数据库需要特定的API调用才能在磁盘上创建文件。所以,是的,你的应用程序没有开箱即用,你是对的。

当您希望应用程序只使用“新数据库”时,如果提供程序开箱即用于标准实现(可能正在执行'CREATE DATABASE'语句),那么您可能会很幸运您将需要提供执行数据库特定工作的DatabaseCreator的单独实现。