2013-05-01 123 views
0

我正在開發一個多租戶MVC 4應用程序,我將按照每個客戶的方式使用一個模式。我想在客戶註冊時在代碼中運行數據庫遷移。這可能使用EF 5/Code First Migrations嗎?在代碼中執行代碼第一次遷移?

所以當客戶註冊時,我會在dbo中創建一個帳戶。然後我會檢查他們的子域是否作爲數據庫中的模式存在,如果沒有,我將創建模式並理想地運行遷移。

謝謝!

澄清

當我創建數據庫中的客戶新的模式,我要運行新的架構遷移。因此,例如,

我將有schema1.Products和schema2.Products。

回答

2

如果我得到你想要什麼樣的權利?

你可以使用類似這樣

var migrator = new DbMigrator(new Configuration()); 
if (migrator.GetPendingMigrations().Any()) 
    migrator.Update(); 

甚至更​​好,你可能想創建自己的initializer - 例如檢查我的這些職位...

What is the correct use of IDatabaseInitializer in EF?

How to create initializer to create and migrate mysql database?


我用你的方法看到的問題是,會 你不得不「獨立」的賬戶模型/數據庫 - 和你正在嘗試遷移的那個。既然你提到多租戶,可能已經是這種情況。

但我想你也可以克隆帳戶等的「基礎實體」 - 然後將其餘的遷移到頂端。這有點複雜 - 模型在開始(第一次使用)時創建一次(每次連接)並從此開始緩存。所以唯一的辦法是重新啓動重新加載,我認爲(不要因爲它而堅持我的話,只是在這裏大聲思考)

+0

我想我所要做的就是使用遷移的基礎實體,如帳戶和然後運行SQL腳本來創建特定於模式的模式和其他表。有兩個不同的遷移班將會很好。 – Mike 2013-05-01 18:58:13

+0

有效地回答你的主要問題(用自定義初始值設定項) - 但其餘的內容太具體了,我幾乎不能告訴你任何比我已經做過的更明智的事情。至於「兩個不同的......」,遷移主要是「singleton」(遷移==你的配置+腳本+連接+ Db + __MigrationHistory sys表)。我認爲你可以在兩個庫中有兩個,但是你必須有'兩個db -s'(導致db中的遷移表)。這不是多租戶(它來自EF6)。 – NSGaga 2013-05-02 13:31:03

0

不知道這是否是你問什麼,你可以在命令行中運行代碼遷移:

packages\EntityFramework.5.0.0\tools\migrate.exe Example.dll /startUpDirectory:Example\bin 

所以理論上你可以調用這個每當有新客戶簽訂了協議。