我开发了一种企业产品,目前生活在一些网站上。这是使用SQL Server作为后端数据存储在MS堆栈上开发的。 我没有使用EF / NHibernate进行数据访问,而是使用了dapper和一些自定义扩展。从大多数情况来看,这对我们来说效果很好 我们拥有的查询是跨多个表的复杂聚合和过滤器。拥有自定义SQL可以大大减少我们识别瓶颈并加快修复的麻烦。
现在由于一些商业原因,我们需要为一个大客户支持oracle(我们无法让他们使用SQL,因为他们是一个完整的oracle商店)。
假设我需要更改许多数据类型以确保数据库之间的一致性,如果我可以获得有关整体方法的一些指示,将会很有帮助
最好的方法是什么,以便我可以支持两个数据源的查询
方法1:尝试将大多数查询移至ANSI SQL,并且只对某些专门查询进行单独查询
方法2:使用EF和Dapper的组合。 EF将用于更简单的操作,而dapper将用于繁重的读取操作。如果再次使用dapper可能需要单独查询oracle& SQL
方法3:继续使用Dapper并对所有操作分别进行查询
2)我有dacpac用于数据库部署自动化。我如何为oracle实现同样的目标?
除了这些还有其他项目,我需要注意支持两个数据库,如处理日期时间,货币等?
答案 0 :(得分:2)
当你开始使用EF进行开发,并且所有表都有POCO类时,我更喜欢方法3.
因此,使用Dapper构建Oracle环境(使用使用Ms SQL Server生成的POCO)。
您可以将DAL构建为存储库模式,工作单元
随时记录,oracle / sql server之间的数据类型不匹配,并采取必要的更正来统一DAL。
对于应该在Oracle / SQL Server中传递的DAL的单元测试,您是安全的。
<强> EDIT2:强>
由于您具有SQL Server的工作系统,并且最大限度地缩短了开发时间,因此请研究 Alternative 4 :)解决方案&#34;将EntityFramework与Oracle数据库结合使用。&#34; 看看:
Can you use Microsoft Entity Framework with Oracle?
http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm
您可以为该解决方案制作POC(概念证明)。
https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/
安装 - 包Oracle.ManagedDataAccess.EntityFramework
迁移到oracle数据库的步骤:
使用Oracle Migration Workbench将MS SQL Server数据库迁移到oracle数据库
更多详情:
http://www.oracle.com/technetwork/topics/o57sql-100253.html
该工具使您能够迁移所有对象,包括架构对象,表,触发器和存储过程以及处理数据类型转换。 要了解数据类型之间的映射,请阅读:
https://www.mssqltips.com/sqlservertip/2944/comparing-sql-server-and-oracle-datatypes/
快速移动应用程序使用Oracle数据库
迁移数据库后,您使用Dapper,修改连接字符串并开始测试您的应用程序,查找所有错误(不要逐个调试),以了解更改的所有副作用。
我希望应用程序发生微小变化(如果不能正常工作)。
计划变更。
您可以在共享项目中使用dapper移动所有DAL(如果您使用的是vs 2013/2015),这可以由当前使用Sql Server的应用程序和使用Oracle的新应用程序引用数据库中。
在这种情况下,您的DAL只包含连接字符串和共享项目的连接类。
oracle / Ms Sql Server的单元测试
1)创建 shared Projec t,其中包括oracle和Ms sqL服务器的所有常见测试。
2)创建单元测试项目对于Ms Sql Server,引用共享项目,定义连接字符串,添加其他测试(如果在实现中存在一些差异)。
3)创建单元测试项目对于oracle,正如我们在第2步中所做的那样
4)运行两个测试并确保所有测试都通过 如有任何更改,请再次运行测试。
答案 1 :(得分:0)
如果您对数据访问层进行了测试,我会选择方法1。