2016-03-04 62 views
1

我有一個EF6數據庫優先應用程序,它使用從dbo架構生成到edmx的表。如何爲Code First DbContext動態地設置模式?

要更新某些相互配合使用的大型定價表,我需要在基於日期的新架構中創建新表,然後在事務中創建新表,將當前表移動到備份架構並移動新表到dbo模式。這是通過讀取edmx文件和更改模式創建的新的MetadataWorkspace實現的,並且允許我使用兩個DbContext來處理dbo模式中的現有數據,另一個使用新模式中的新表格。並且非常適合數據庫優先! See this SO article.

對於CodeFirst,可以設置modelBuilder.HasDefaultSchema在OnModelCreating,但隨後的DbContext被鎖定,並且OnModelCreating沒有新的DbContext實例再次調用,所以無論模式設置,現在正用於所有這些DbContexts申請期間。

我的問題是 - 我怎樣才能動態地改變CodeFirst的DbContext,我可以有兩個DbContext,每個使用不同的架構?由於模式名稱是動態的,我不能只定義兩個DbContext派生類。

回答

0

顯然這不能完成,但一旦DbContext鎖定並保留模式名稱一次。我計劃通過保持第二個模式名稱固定而不是動態來解決此需求。如果可以用新的模式名稱「克隆」鎖定的DbContext,但是目前不可能,我會發現它會很好。關閉。

0

您可以在EF6中動態設置模式。你需要調整你初始化DBContext的方式。 我發現大部分的東西我一直在尋找在這裏: Multi-Tenant With Code First EF6

+0

THX但只能做一次,然後鎖定的DbContext和OnModelCreating不叫上不同的架構名稱的新實例。 – Dave

相關問題