2017-06-20 44 views
0

因此,我已經學習了兩週的.NET Core,並且有一堆數據應該始終在數據庫中。如何在.NET Core MVC中初始化/更改數據庫?

因此,在this tutorial之後,我通過名爲DbInitializer.cs的類創建了我的數據庫,其功能Initialize(ExamsContext context)Startup.cs中調用。現在

,這個功能看起來是很喜歡這樣的:

public static void Initialize(ExamsContext context) 
{ 
    context.Database.EnsureCreated(); 

    // Check if it's already populated. 
    if (context.Exams.Any()) 
    { 
     return; // DB has been seeded 
    } 

    // Add stuff 
    var data = new Data { ... }; 
    context.Data.Add(data); 
    context.SaveChanges(); 
} 

現在,這並不覺得自己是「正確」的方式,比如,每次我想改變的東西(如添加的東西的事情時這應該總是在那裏的功能)我做的開始添加context.Database.EnsureDeleted();骯髒的修復。

現在我這樣做的原因是因爲它是我知道如何去做的唯一方法,並且想知道更好的方法,但是在我的搜索結果中沒有取得成功,所以我想我會問這裏關於最佳做法的一些提示以及我可以在哪裏閱讀更多關於如何處理的內容:)

+0

你可以做類似於Sqlite的東西..當你添加新的代碼時,改變一個「版本號」變量。根據存儲在數據庫中的值檢查此變量值。如果該值缺失或與代碼中的值不同,則運行某種數據升級過程。升級後,將版本變量推送到數據庫。 –

+0

EF核心似乎不支持播種(播種就是你在做什麼),你正在遵循建議的行爲。 https://github.com/rowanmiller/UnicornStore/blob/master/UnicornStore/src/UnicornStore/Models/UnicornStore/UnicornStoreExtensions.cs – woelliJ

+0

您應該只需檢查所有必要的實體是否在啓動時在數據庫中,而不是在每個函數調用。在代碼中確保它們不會被刪除(並且不要直接從數據庫中刪除它們) – woelliJ

回答

0

有人請將我的評論添加到他的問題中。我缺乏聲譽。
你有沒有想過編寫一個SQL腳本?然後,您只需要幾行代碼,並將sql-file的內容加載到它所需的功能中。在那個文件中,你可以做基本的if語句並檢查數據庫是否被填充。