2012-04-30 69 views
0

我需要將數據從一個數據庫傳輸到另一個數據庫。目標數據庫包含的數據量遠小於源數據量,並且每個表只是源表列的一個子集。我剛剛創建了目標DBML,並且我正確地得到編譯錯誤,因爲L2S數據類型(在目標DBML中)與源DBML中的L2S數據類型相同。Linq to SQL多個DBML共享類型

有沒有辦法在數據上下文之間共享這些類型?如果沒有,是否有方法將源類型轉換爲目標類型,因此我不必在保存到目標數據庫之前創建映射器來將每個源類型映射到目標類型?

要清楚,在源DBML中,我只包含必要的列。這就是源和目標類型完全相同的原因,但它們屬於它們自己的DBML。

這完全一樣的表在兩個DBMLs:

enter image description here

這個問題已經被正確地闡明的鬥爭。另一種方法是:「我可以從源表中獲取數據,並使用源DBML中的一種類型將其保存到目標數據庫中?」

+0

你可以在不同的命名空間中創建DBML嗎?然後你可以編譯並使用它們。如果之後你想以更自動的方式映射它們(而不是手動爲每個實體),那麼類似AutoMapper的應該能夠幫助。 – David

+0

我可以,但我仍然有嘗試將源類型保存到目標數據庫的問題。我不認爲這會因爲類型的表格屬性而起作用。 –

+0

我能夠解密這些字段 –

回答

2

由於@David建議在不同的命名空間中創建DBML,然後使用Automapper或編寫一些生成映射的代碼(根據您的要求,這非常容易)。

有沒有辦法在數據上下文之間共享這些類型?

如果沒有,有沒有辦法投源類型爲目標類型 所以我沒有創建映射器每個源類型映射到 目標類型在保存到目標數據庫之前?

您必須創建映射 - 但是,它非常容易(屬性具有相同的名稱,類型等)。我甚至認爲沒有Linq2Sql或任何其他ORM會更容易。您應該刪除所有約束,FK等,在SQL命令級別複製數據(自己生成此代碼),然後重新創建所有約束。

+0

同意,有SQL本機方式執行這樣的ETL過程,而不涉及.NET和ORM。 – David