2012-01-24 69 views
8

我們正在嘗試構建一個同時使用Oracle和SQL Server(而不是同時)的數據訪問層。實體框架Oracle和Sql服務器 - 如何構建獨立於數據庫的應用程序

我們使用EF Model-first來創建模型並創建用於構建數據庫的SQL腳本。我們的第一個想法是創建2個EDMX文件,每種類型一個,並根據客戶需要使用適當的文件。我們使用Oracle和SQL Server數據庫生成工作流和DDL生成模板來爲每個數據庫創建腳本。

我們的主要問題是當數據庫模式發生變化時,我們不想刪除並重新創建數據庫,但只創建遷移腳本來更新基於我們模型的數據庫(客戶端有許多數據將丟失)。

我們使用EF power pack來提取SQL Server的遷移腳本,但是Oracle沒有這樣的遷移腳本。

我們希望能夠幫助您找到一個好的數據層(如果Oracle和SQL Server可能並且不復雜,則可以使用1個EDMX),以及在新的情況下從我們的模型生成數據庫更改以更新現有客戶端數據庫的好方法應用版本

我們發現這是一個起點 http://msdn.microsoft.com/en-us/data/ff830362但是沒有提及Oracle的支持。

我們已經嘗試了代碼優先和EF遷移,但是Oracle在數據庫創建和遷移方面再次失敗。

有關我們如何完成此任務的任何建議?

謝謝

回答

4

沒有辦法爲SQL Server和Oracle提供單一的EDMX。 EDMX由CSDL(實體定義),SSDL(數據庫定義),MSL(這些定義之間的映射)三部分組成。 SSDL必須始終以具體數據庫爲目標,因此至少需要針對Oracle和SQL Server單獨使用SSDL,如果幸運的話,您也不需要單獨的MSL(映射必須完全相同,如果使用任何工具生成映射數據庫)。

因此,您至少需要第二個數據庫的EDMX文件的一部分並手動維護它。

如果您需要支持Oracle的數據庫遷移,您必須從Oracle(或第三方)尋找工具。例如RedGateSQL ServerOracle提供了支持模式遷移的工具。

Visual Studion Premium和Ultimate版本還提供了用於比較數據庫模式的工具。它默認只支持SQL Server,但是Toad Extensions也應該支持Oracle。

一旦你有了這些工具,你只需要將在客戶服務器上部署的模式與新模式進行比較,並且該工具應該爲你創建遷移腳本。

+0

雖然有這個獨立性,但有點複雜。你有沒有試過Telerik的Open Access ORM,它似乎是做我們正在尋找許多數據庫,包括SQL Server和Oracle,它處理遷移? – christosst

0

我在這個主題上找到的最好的文章是Paul Reynolds Blog。 嘗試從第5部分到第9部分。

有很多有關甲骨文在那裏提到的疑點...是非常有幫助的!

相關問題