2012-11-08 82 views
1

我正在使用sql azure作爲存儲。使用EF插入和更新合併

我有一個數據集(實體列表),既有新的記錄,也有舊的記錄。我無法確定哪個記錄用於更新或插入。我需要一種方式使用EF發送整個東西到數據庫,使用一些聲明,將確定如何處理它(意味着更新或插入)

我已經能夠使用對象上下文找到合併,但它不符合我的目的。

如果有什麼不清楚的地方,請詢問。

+0

是明顯的解決方案 - 即通過列表循環,查詢每個實體的數據庫,如果它存在於數據庫中,然後將狀態設置爲修改或添加 - 沒有選擇嗎? – Slauma

+0

數據相當龐大,是的,它是一個選項,但它會花費很多時間。這就是爲什麼我試圖避免它。 –

+0

我認爲沒有其他方式使用EF比遍歷列表。唯一的選擇可能是編寫一個存儲過程來獲取列表傳遞並執行更新或直接在數據庫中插入。 – Slauma

回答

0

這裏有幾個選項,但是在所有這些選項中,EF無論如何都必須知道哪些實體是新的,哪些是舊的。

  • 讓EF做更改跟蹤。也就是說,查詢並從相同的上下文實例保存。這是一個明顯的答案,我不會多說這些,因爲我認爲你的架構不允許這樣做,否則你不會問這個問題。
  • 具有實體的某些特徵,可讓您知道它是舊的還是新的。如果您不能使用EF更改跟蹤,這是迄今爲止最常見的操作。通常這是通過使用主鍵值完成的 - 對於新實體而言,其值爲零/負數/空值,對於舊實體則爲其他值。
  • 查詢每個實體的數據庫以查看它是否存在。