好吧,我一直在努力與這一天,這裏是爲那些尋求答案的解決方案...
我假設大多數人閱讀這篇文章在這裏是因爲他們有一個大的DbContext類有很多DbSet <>屬性,加載需要很長時間。你可能想過給自己,哎呀,這是有道理的,我應該分裂的背景下,因爲我不會使用所有dbsets的一次,我只會根據我需要的情況下加載「部分」上下文它。所以你把它們分開,只是爲了發現Code First遷移不支持你的革命思維方式。
因此,您的第一步必須分割上下文,然後爲每個新上下文添加MigrationConfiguration類,您添加了與新的上下文類完全相同的連接字符串。
於是你試着運行一個新分裂上下文的一,通過做添加遷移CONTEXT1然後做更新,數據庫-Verbose ...
一切似乎都做工精細,但後來你發現,每一個後續遷移從先前的遷移中刪除了所有表,並且只從最後一次遷移中留下表。
這是因爲,目前的遷移模型預計每個數據庫單的DbContext,它必須是一個鏡子比賽。
我也試過,有人建議在這裏做這個,創建一個SuperContext,其中包含所有的Db集合。創建一個Migration Configuration類並運行它。保留部分Context類,並嘗試實例化並使用它們。 EF抱怨Backing模型已經改變。同樣,這是因爲EF會將您的部分dbcontext與您的Super Context遷移中剩餘的All-Sets上下文簽名進行比較。
這是我認爲的一個主要缺陷。
就我而言,我決定PERFORMANCE比遷移更重要。所以,我最終做的是,在我運行超級上下文並擁有所有表格後,我進入數據庫並手動刪除_MigrationHistory表。
現在,我可以實例化並使用我的部分上下文,而不用EF抱怨它。它沒有找到MigrationHistory表,只是繼續前進,讓我有一個數據庫的「部分」視圖。
當然,折衷是對模型的任何更改都必須手動傳播到數據庫,所以要小心。
它雖然爲我工作。
這是一個非常有趣的問題。我想知道是否有多個上下文支持是移植用例的一部分。 – 2012-02-02 19:31:45
我非常懷疑多上下文可以使用自動遷移,它旨在更新數據庫以使其看起來像上下文無論如何。您可能有更多的運氣使用手動遷移來開發插件,針對單獨的數據庫生成遷移,然後將它們全部應用於相同的數據庫。 – Betty 2012-02-04 02:11:28
與此同時,我偷看了EF 4.3程序集,並且我也懷疑遷移框架能夠應對多種情況。但是我沒有想到的技術原因。使用EDM模型,您可以將其與數據庫進行比較,找到現有表格表創建或更改,並通過手動遷移給用戶保留刪除方案。 – 2012-02-05 11:39:53