2017-06-20 97 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语句并检查数据库是否被填充。