我正在研究在即將發佈的現有產品的項目中使用Microsoft實體框架。我們當前的產品支持兩個DBMS(Oracle和SQL Server),每個DBMS的架構都保存在單獨的.sql腳本文件中。實體框架 - 架構升級,多個DBMS和代碼優先
實體框架(4.1)看起來很吸引人,因爲它允許通過代碼生成,反射等自動實現各種場景。但是,據我所知,其中一些好處似乎與其他好處相互排斥。例如,爲了支持多個DMBS,我推斷我需要使用模型或代碼優先設計,在這種情況下,EF會根據模型爲每個模型生成模式(我已經很少看到任何帖子或關於此的文檔,所以我可能是錯的)。這意味着我們現有的模式需要被放棄(模型優先)或映射(先優先)。此外,更新模式需要手動腳本,因爲EF似乎不支持模式升級(不擦除數據)。
- 模型優先和代碼優先是在EF中支持多個DBMS的唯一可行方法嗎?我意識到,從技術上講,確保兩個任意模式是相同的是不可能的,所以我認爲這是事實。
- 是否存在代碼優先和映射到多個DBMS系統的潛在缺陷?例如,Oracle沒有自動增量列;你必須使用序列。這是如何映射到DbContext中的?我是否需要爲每個DBMS創建單獨的地圖?
- EF是否支持任何機制將現有的DBMS架構升級到其中一個代表EF模型(架構重建=/=升級),還是我僅限於手動執行此操作?
- 我確實想到了一種可能的方式來首先使用數據庫並支持多個DBMS,但這是一個維護噩夢。這個想法是爲兩個生成的數據模型添加另一個抽象層,併爲每個EF生成的模型創建轉換器類。這似乎是實現它的最佳方式,以便每個DBMS都可能擁有自己的模型,但我的代碼將處理映射。但是在這樣做的過程中,我真的從EF中獲得了什麼?也許查詢生成,但這是否值得?
你考慮過看Nhibernate嗎? – 2011-04-03 06:19:43
@Derek我曾考慮過查看Nhibernate,但是這與我關於EF的問題沒有直接關係。 – Travis 2011-04-03 23:45:32