[英]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.