在遷移期間播種資料
啟用和建立遷移後,可能需要在資料庫中初始填充或遷移資料。有幾種可能性,但對於簡單的遷移,你可以在呼叫 enable-migrations
後建立的檔案 Configuration 中使用方法’Seed()
’。
Seed()
函式檢索資料庫上下文作為唯一引數,你可以在此函式中執行 EF 操作:
protected override void Seed(Model.DatabaseContext context);
你可以在 Seed()
內執行所有型別的活動。如果發生任何故障,則會回滾完整的事務(甚至應用的修補程式)。
僅當表為空時才建立資料的示例函式可能如下所示:
protected override void Seed(Model.DatabaseContext context)
{
if (!context.Customers.Any()) {
Customer c = new Customer{ Id = 1, Name = "Demo" };
context.Customers.Add(c);
context.SaveData();
}
}
EF 開發人員提供的一個很好的功能是擴充套件方法 AddOrUpdate()
。此方法允許基於主鍵更新資料或插入資料(如果它尚不存在)(該示例來自 Configuration.cs 的生成原始碼):
protected override void Seed(Model.DatabaseContext context)
{
context.People.AddOrUpdate(
p => p.FullName,
new Person { FullName = "Andrew Peters" },
new Person { FullName = "Brice Lambson" },
new Person { FullName = "Rowan Miller" }
);
}
請注意,在應用最後一個補丁後呼叫
Seed()
。如果需要在修補程式期間遷移或播種資料,則需要使用其他方法。