2013-08-21 105 views
1

我正在使用實體框架5.0並已實施自定義遷移。EF代碼優先 - 運行後遷移處理和清理

我想要做的一件事是在完成特定遷移後執行一些計算和清理作業。我知道Seed()方法用於遷移後數據操作,但是它隨每次遷移都運行。我希望這隻能在特定的遷移完成後運行一次。

我會在自定義遷移本身內部完成它,但是這些過程需要我抽取結果集並對它們進行計算等,如果可能的話我想在C#中執行此操作(以利用我們的作業處理系統)。

爲特定遷移運行遷移後處理代碼的最佳方式是什麼?

+0

有什麼不好放置'向上()'遷移的方法內的邏輯是什麼?您也可以創建SPROC並在遷移後執行它。 –

+0

據我所知,在'Up()'中,你不能使用上下文等,因爲數據庫沒有更新到最新的遷移。這會迫使我在'Sql()'中完成這個工作,我試圖避免這個問題。 –

+0

鑑於你正在針對特定的遷移,你應該知道表/列 - 所以SQL不應該是那麼大的交易,不是?您可能可以利用'Appplication_Start',但沒有什麼可以說這是一個_specific_遷移,只是數據庫已更新。 –

回答

1

我想你可以針對具體的遷移通過詢問__MigrationHistory表。但是這讓我覺得有點脆弱,因爲你可能想在某個時候重新搭建遷移。我想我寧願根據其他標準來引發清理。

有什麼辦法可以檢測到數據是「髒」嗎?然後可以在必要時觸發清理。如果這是不可能的,您可以在數據庫中創建一個表來保存指示何時需要清理的標誌。您可以在Up()方法中設置標誌,並在遷移中的Down()方法中將其刪除。然後你可以檢查Seed()方法中的標誌並觸發清理。

我覺得這些都是很好的Tips for Entity Framework Migrations