2009-06-08 130 views
3

我們正在進行一個爲期多年的項目,在這個項目中我們正在構建一個新系統和一個新數據庫,以最終取代舊系統和數據庫。當我們改變它們時,用戶正在使用新舊系統。如何隨着時間的推移將數據庫部分遷移到新系統?

我們不斷遇到的問題是,一個系統中的對象依賴於另一個系統中的對象。我們一直在使用意見,但已經遇到了其中一項技術(實體框架)的限制,並且正在考慮其他選項。

我們現在看到的其他選項是複製。我的老闆對這種額外的維修工作不感興趣。那麼,還有什麼其他選項可以使依賴數據進入需要它的數據庫?

更新:

我們正在使用的技術是SQL Server 2008和實體框架。兩個數據庫都在同一個sql服務器實例中,所以不需要連接服務器。

我們面臨的實體框架的限制是我們似乎無法創建基於表的實體和基於視圖的實體之間的關係。就我所知,視圖和表之間的數據庫中不存在任何關係,所以edmx圖不能推斷出它。我似乎無法手動創建關係而不會出錯。它認爲視圖中的所有列都是鍵。

如果我離開它這樣,我得到這樣的視圖中的每個列的錯誤:

Association End key property [...] is not mapped.

如果我嘗試「實體鍵」屬性更改爲false,不屬於該列關鍵我得到這個錯誤:

All the key properties of the EntitySet [...] must be mapped to all the key properties [...] of table viewName.

根據this forum post這聽起來像實體框架的限制。

更新#2

我還要提到的實體框架的主要限制是它僅支持每次一個數據庫。所以我們需要將舊數據顯示在實體框架的新數據庫中才能看到它。我們只需要在新系統中讀取舊系統數據。

+0

這裏涉及哪些技術?舊系統是什麼版本,新系統是什麼版本? – 2009-06-08 22:20:12

+0

請解釋您對當前方法所使用的「限制」。視圖+是我總是使用的,到目前爲止,我已經能夠解決任何問題比備選方案(複製,鏈接服務器等)更容易。 – RBarryYoung 2009-06-09 01:56:20

回答

0

感謝您的回覆。我們將嘗試向舊數據庫表中添加觸發器,以在新數據庫的新表中插入/更新/刪除記錄。這樣我們就可以繼續使用實體框架,並且可以進行我們需要的任何數據轉換。

一旦用戶界面功能移到新系統的特定功能,我們將從舊數據庫中刪除該表,並向舊數據庫添加一個視圖,該舊數據庫具有指向新數據庫表的相同名稱兼容性。

我認識的一件事情就是在我們能夠做到這一點之前需要發生的事情是,我們必須搜索我們所有的代碼和sql for @@ Identity,並用scope_identity()替換它,這樣觸發器不會混淆舊系統。

1

您可以使用鏈接的服務器查詢將數據保留在原來的位置,但從其他數據庫連接到該數據庫。

取決於如何跟上時代的需要是&如果一個數據源可以留在每個數據庫中的數據只讀您可以:

  1. 使用數據庫複製嚮導創建的SSIS包 您可以爲SQL代理任務
  2. 使用快照複製
  3. 創建自定義BCP /縮小過程 的數據獲取到其他數據庫
  4. 使用事務複製,其中0定期運行可以接近實時。

如果數據需要在這兩個數據庫進行讀寫,那麼你可以使用:

  1. 事務複製與 更新訂閱
  2. 合併複製

當你走了列出維護解決方案涉及的工作量增加。使用鏈接的服務器查詢最適合您嘗試實現的功能。

編輯:如果它們是相同的服務器,然後由其他用戶的建議,你應該能夠servername.databasename.schema.tablename看起來訪問表就像是一個實體的框架問題&不是一個數據庫的問題。

0

我不知道EntityToSql但我知道在LinqToSql可以連接到多個數據庫/服務器中的一個的.dbml如果用前綴表:

ServerName.DatabaseName.SchemaName.TableName 

MyServer.MyOldDatabase.dbo.Customers 

我已經能夠點擊一個在.dbml中複製並粘貼到備用項目的.dbml文件中,然後設置關係,並且它可以工作......就像我說的那樣是在LinqToSql中,儘管還沒有用EntityToSql進行過嘗試。在你完成複製等所有工作之前,我會給它一個鏡頭。

0

如果Linq-to-Entities不能跨越數據庫,那麼複製或模擬它的東西是唯一可行的。

出於性能考慮,您可能希望將合併複製或事務與排隊(而非立即)更新。

相關問題