簡體   English   中英

EF代碼優先update-database -script未運行Seed()方法

[英]EF Code First update-database -script not running Seed() method

在我的Entity Framework Code First項目中,如果我運行

update-database

通過Package Manage Console命令,我的Seed()方法成功運行。 但是,如果我使用-script參數運行命令:

update-database -script

...沒有調用Seed()方法,並且生成的SQL不包含用於播種數據庫的SQL命令。 此行為是可重復的。 我正在嘗試創建完整的數據庫腳本以進行部署。

為什么使用-script和不使用-script的SQL命令之間存在差異,以及如何使用-script開關獲取update-database以運行Seed()方法?

我認為這不是差異,而是設計使然。

例如,當您使用-script ,不會執行數據庫更新,因此也不應該調用Seed()方法。 還有一個事實是,遷移是一種設計時工具,而Seed()是一種已在運行時進行編譯和調用的方法。

至於為什么生成的腳本中不包含Seed()方法的內容,我的答案也是運行時設計時間的不同概念。 想象一下,您有如下的Seed()方法:

protected override void Seed(PersonContext context)
{
   Random r = new Random();
   context.People.Add(new Person("PersonA", r.Next(90));
   context.SaveChanges();
}

現在,在運行時創建Random實例,並在運行時調用Next()。 您將如何嘗試將其編譯為SQL? 如果您有一個文件並從中讀取數據並將其放入數據庫,該怎么辦? 這些都是在設計時無法僅在運行時進行評估的事情(即,如果文件在設計時不在正確的位置,則僅在運行時沒有問題)。 這就是為什么諸如遷移腳手架之類的設計時工具無法對其進行評估的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM