2016-07-24 104 views
3

我開發了一個企業產品,目前生活在幾個站點。這是在MS堆棧上開發的,使用SQL Server作爲後端數據存儲。 我沒有使用EF/NHibernate進行數據訪問,而是使用了相同的Dapper和一些自定義擴展。這對我們來說很好,因爲我們所擁有的大多數 查詢都是跨多個表的複雜聚合和過濾器。定製SQL大大減少了我們查找瓶頸並加快修復速度的工作量。同時支持MS-SQL和Oracle

現在由於一些商業原因,我們需要爲一個大客戶支持oracle(我們無法讓他們使用SQL,因爲他們是一個完整的Oracle商店)。

假設我需要改變很多數據類型,以確保整個數據庫的一致性,這將是有益的,如果我能得到的總體思路的一些方向

  1. 什麼是接近讓我能的最佳方式支持查詢兩個數據源

    • 方法1:嘗試將大部分查詢到ANSI SQL和只有單獨的查詢爲一些專門的查詢

    • 方法2:使用EF和Dapper的組合。 EF將用於簡單的操作,而精靈將用於繁重的讀取操作。再次徘徊無論採用短小精悍可能需要有單獨的查詢爲Oracle & SQL

    • 方法3:繼續使用小巧精緻,並有單獨的查詢所有的操作

2)I dacpac用於數據庫部署自動化。我如何爲oracle實現相同的功能?

除了這些,還有其他什麼東西在支持兩個數據庫時需要注意,比如處理datetime,currency等嗎?

回答

1

當你開始使用EF發展,對所有的表POCO類,我更喜歡的方法3

所以,用精緻小巧的建立Oracle環境(使用POCO與MS SQL Server生成)。

你可以建立DAL作爲存儲庫模式,工作單位

文件,當您去,ORACLE/SQL服務器之間的數據類型不匹配,並採取必要的修正,以統一DAL。

對於應通過Oracle/SQL Server傳遞的DAL進行單元測試,您是安全的。

EDIT2:

正如你所工作的系統與SQL Server,並最大限度地減少開發時間,學習替代4 :)液「使用的EntityFramework與Oracle數據庫。「 看一看:

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遷移工作臺到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數據庫

工作遷移數據庫之後,你用短小精悍,修改連接字符串並開始測試你的應用程序,發現所有的錯誤(不要逐個調試)到所有變化的副作用。

我希望應用程序發生很小的變化(如果不按原樣運行)。

計劃變更。

您可以將所有DAL與短小精悍的共享項目(如果你使用VS二千零十五​​分之二千零十三工作),這可以通過與SQL Server和Oracle數據庫的新的應用程序都當前的應用程序引用。

在這種情況下,您的DAL僅包括連接類和連接字符串和共享項目。

爲兩個Oracle/MS SQL服務器

1)創建共享工程中的噸包括用於Oracle和SQL MS服務器所有常見的測試單元測試。

2)創建單元測試項目對於Ms Sql Server,引用共享項目,定義連接字符串,添加其他測試(如果實現中存在一些差異的話)。

3)再次創建單元測試項目對於Oracle來說,正如我們在第2步

4行)運行測試和確保所有的測試都通過 對於任何改變,運行測試。

+0

@ M-哈桑,如果理解正確的話,你所建議的是有EF POCO類,但用短小精悍的兩個SQL& oracle分開?我同意沒有從整合測試套件中獲得測試數據訪問跨越sql和oracle –

+0

我編輯,並提供替代4,使用EF與Oracle –

+0

@ m-hassan,知道EF好,我不認爲當我有一些複雜的查詢時,它會工作得很好。所以看起來我需要處理EF和Dapper的工作,儘量減少查詢的重複。 –

0

如果你有你的數據訪問層的測試,我會去接近1

+0

我沒有數據訪問測試,但我認爲現在是我唯一能夠重構並添加測試用例的時間。沒有他們,我會看@無盡的兼容性問題 –

+0

很高興聽到單元測試的重要性。編碼之前的BTW測試(它是如何來的:)) –